<?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>194517</bug_id>
          
          <creation_ts>2019-02-11 15:35:31 -0800</creation_ts>
          <short_desc>Update JSScript SPI based on feedback</short_desc>
          <delta_ts>2019-02-21 20:22:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>194912</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mark.lam</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>1505017</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-11 15:35:31 -0800</bug_when>
    <thetext>Update JSScript SPI from feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505018</commentid>
    <comment_count>1</comment_count>
      <attachid>361720</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-11 15:36:24 -0800</bug_when>
    <thetext>Created attachment 361720
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505541</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-12 17:46:38 -0800</bug_when>
    <thetext>*** Bug 194574 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505543</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-12 17:47:04 -0800</bug_when>
    <thetext>*** Bug 194573 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505763</commentid>
    <comment_count>4</comment_count>
      <attachid>361924</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-13 10:37:34 -0800</bug_when>
    <thetext>Created attachment 361924
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505888</commentid>
    <comment_count>5</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-13 15:30:40 -0800</bug_when>
    <thetext>rdar://problem/47712611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507345</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-18 11:47:56 -0800</bug_when>
    <thetext>Spoke with Keith. I&apos;m going to take this over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507505</commentid>
    <comment_count>7</comment_count>
      <attachid>362351</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-18 15:55:28 -0800</bug_when>
    <thetext>Created attachment 362351
WIP

it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507541</commentid>
    <comment_count>8</comment_count>
      <attachid>362351</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-18 16:58:33 -0800</bug_when>
    <thetext>Comment on attachment 362351
WIP

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

&gt; Source/JavaScriptCore/API/JSContext.mm:109
&gt; +    JSValueRef result = JSEvaluateScript(context-&gt;m_context, source.get(), nullptr, url.get(), 0, &amp;exceptionValue);

We need to make this actually load the cached bytecode script instead of re-evaluating the script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507582</commentid>
    <comment_count>9</comment_count>
      <attachid>362364</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-18 20:01:00 -0800</bug_when>
    <thetext>Created attachment 362364
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507587</commentid>
    <comment_count>10</comment_count>
      <attachid>362365</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-18 20:49:38 -0800</bug_when>
    <thetext>Created attachment 362365
WIP

We should actually be running the cached bytecode now, but I haven&apos;t tested it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507773</commentid>
    <comment_count>11</comment_count>
      <attachid>362414</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-19 12:25:59 -0800</bug_when>
    <thetext>Created attachment 362414
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507952</commentid>
    <comment_count>12</comment_count>
      <attachid>362464</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-19 18:01:19 -0800</bug_when>
    <thetext>Created attachment 362464
WIP

Need to add tests and clean up some code, then it should be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507979</commentid>
    <comment_count>13</comment_count>
      <attachid>362473</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-19 19:46:15 -0800</bug_when>
    <thetext>Created attachment 362473
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508402</commentid>
    <comment_count>14</comment_count>
      <attachid>362579</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-20 17:51:12 -0800</bug_when>
    <thetext>Created attachment 362579
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508601</commentid>
    <comment_count>15</comment_count>
      <attachid>362626</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 12:00:24 -0800</bug_when>
    <thetext>Created attachment 362626
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508602</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 12:02:47 -0800</bug_when>
    <thetext>Attachment 362626 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/JSAPIGlobalObject.h:60:  The parameter name &quot;script&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/API/JSScript.mm:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2276:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 16 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>1508630</commentid>
    <comment_count>17</comment_count>
      <attachid>362635</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 13:12:29 -0800</bug_when>
    <thetext>Created attachment 362635
patch

Attempt build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508631</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 13:14:11 -0800</bug_when>
    <thetext>Attachment 362635 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2285:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 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>1508666</commentid>
    <comment_count>19</comment_count>
      <attachid>362644</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 14:16:49 -0800</bug_when>
    <thetext>Created attachment 362644
patch

Try to fix more builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508670</commentid>
    <comment_count>20</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 14:20:31 -0800</bug_when>
    <thetext>Attachment 362644 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2287:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 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>1508675</commentid>
    <comment_count>21</comment_count>
      <attachid>362635</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-21 14:30:50 -0800</bug_when>
    <thetext>Comment on attachment 362635
patch

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

&gt; Source/JavaScriptCore/ChangeLog:33
&gt; +        When writing tests, I also discovered that someone previously broke
&gt; +        testapi. This patch also fixes those failures. They were broken when
&gt; +        we switched to using a testapiScripts directory to hold our test .js
&gt; +        scripts. 

Whoops!

&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:80
&gt; +        URL referrerURL(URL(), referrerString-&gt;value(exec));

Don&apos;t you need an exception check here?

&gt; Source/JavaScriptCore/API/JSContextPrivate.h:81
&gt; + @discussion If the provided JSScript was created with JSScriptTypeProgram, the script will run synchronously and return the result of evaluation.

Typo: should be kJSScriptTypeProgram, I think

&gt; Source/JavaScriptCore/API/JSContextPrivate.h:83
&gt; + Otherwise, if the script was created with JSScriptTypeModule, the module will be run asynchronously and will return a promise resolved when the module and any transitive dependencies are loaded. The module loader will treat the script as if it had been returned from a delegate call to moduleLoaderDelegate. This mirrors the JavaScript dynamic import operation.

Ditto for kJSScriptTypeModule.

&gt; Source/JavaScriptCore/API/JSScript.h:62
&gt; ++ (nullable instancetype)scriptWithSource:(NSString *)source inVirtualMachine:(JSVirtualMachine *)vm;
&gt; +
&gt; +/*!
&gt; + This SPI is deprecated and should not be used. Use &quot;scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:&quot; instead.
&gt; + */
&gt; ++ (nullable instancetype)scriptFromASCIIFile:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;
&gt; +
&gt; +/*!
&gt; + This API is deprecated and should not be used.
&gt; + */
&gt; ++ (nullable instancetype)scriptFromUTF8File:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;

Can you add deprecation warnings to these methods?

&gt; Source/JavaScriptCore/API/JSScript.h:76
&gt; ++ (nullable instancetype)scriptOfType:(JSScriptType)type inVirtualMachine:(JSVirtualMachine *)vm withSourceURL:(NSURL *)sourceURL andSource:(NSString *)source andBytecodeCache:(nullable NSURL *)cachePath error:(out NSError * _Nullable * _Nullable)error;

Why does this one have source at the end but the method below have it right after the VM?

I also think that the parts of the method most likely to impact the version you choose should come earlier, which is why I put the source/filePath first originally.

&gt; Source/JavaScriptCore/API/tests/testapi.mm:2066
&gt; +            CRASH();

I think we usually just do a check here.

&gt; Source/JavaScriptCore/API/tests/testapi.mm:2071
&gt; +        RELEASE_ASSERT(result);
&gt; +        RELEASE_ASSERT([result isNumber]);

ditto.

&gt; Source/JavaScriptCore/API/tests/testapi.mm:2098
&gt; +    test(kJSScriptTypeProgram);
&gt; +    test(kJSScriptTypeModule);

Can we make this a parameter and add two lines to the filter?

&gt; Source/JavaScriptCore/API/tests/testapi.mm:2217
&gt; +        size_t afterCount = proc_pidinfo(getpid(), PROC_PIDLISTFDS, 0, 0, 0);

You need another #ifdef here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508680</commentid>
    <comment_count>22</comment_count>
      <attachid>362635</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 14:52:21 -0800</bug_when>
    <thetext>Comment on attachment 362635
patch

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

&gt;&gt; Source/JavaScriptCore/API/JSScript.h:76
&gt;&gt; ++ (nullable instancetype)scriptOfType:(JSScriptType)type inVirtualMachine:(JSVirtualMachine *)vm withSourceURL:(NSURL *)sourceURL andSource:(NSString *)source andBytecodeCache:(nullable NSURL *)cachePath error:(out NSError * _Nullable * _Nullable)error;
&gt; 
&gt; Why does this one have source at the end but the method below have it right after the VM?
&gt; 
&gt; I also think that the parts of the method most likely to impact the version you choose should come earlier, which is why I put the source/filePath first originally.

I thought ObjC style was to include similar parameters in the same argument index where possible. I could be wrong though, I&apos;m not very familiar with ObjC API style design.

I moved the &quot;source code&quot; parameter to be at the same index for these two new APIs.

&gt;&gt; Source/JavaScriptCore/API/tests/testapi.mm:2066
&gt;&gt; +            CRASH();
&gt; 
&gt; I think we usually just do a check here.

That gets super cumbersome. Also, maybe crashing this script will actually make people realized they broke things. All other comments will be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508693</commentid>
    <comment_count>23</comment_count>
      <attachid>362653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 15:18:53 -0800</bug_when>
    <thetext>Created attachment 362653
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508695</commentid>
    <comment_count>24</comment_count>
      <attachid>362653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 15:20:20 -0800</bug_when>
    <thetext>Comment on attachment 362653
patch

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

&gt; Source/JavaScriptCore/API/tests/testapi.mm:2216
&gt; +        checkResult(@&quot;JSScript should not hold a file descriptor&quot;, count == afterCount);

oops, this needs to go above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508696</commentid>
    <comment_count>25</comment_count>
      <attachid>362654</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 15:20:47 -0800</bug_when>
    <thetext>Created attachment 362654
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508699</commentid>
    <comment_count>26</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 15:24:16 -0800</bug_when>
    <thetext>Attachment 362654 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 18 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>1508704</commentid>
    <comment_count>27</comment_count>
      <attachid>362654</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-02-21 15:33:24 -0800</bug_when>
    <thetext>Comment on attachment 362654
patch

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

r=me with comments.

&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:193
&gt; +            args.append(createTypeError(exec, makeString(&quot;The JSScript that was provided did not have expected type of kJSScriptTypeModule.&quot;)));
&gt; +            call(exec, deferredPromise-&gt;JSPromiseDeferred::reject(), args, &quot;This should never be seen...&quot;);
&gt; +            return encodedJSUndefined();

Nit: you could probably make a lambda taking the error message that calls reject and returns undefined.

&gt; Source/JavaScriptCore/API/JSScript.h:62
&gt; ++ (nullable instancetype)scriptWithSource:(NSString *)source inVirtualMachine:(JSVirtualMachine *)vm JSC_API_DEPRECATED(&quot;Use +scriptOfType:inVirtualMachine:withSource:andSourceURL:andBytecodeCache:error: instead.&quot;, macosx(JSC_MAC_TBA, JSC_MAC_TBA), ios(JSC_IOS_TBA, JSC_IOS_TBA));
&gt; +
&gt; +/*!
&gt; + This SPI is deprecated and should not be used. Use &quot;scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:&quot; instead.
&gt; + */
&gt; ++ (nullable instancetype)scriptFromASCIIFile:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath JSC_API_DEPRECATED(&quot;Use +scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error: instead.&quot;, macosx(JSC_MAC_TBA, JSC_MAC_TBA), ios(JSC_IOS_TBA, JSC_IOS_TBA));
&gt; +
&gt; +/*!
&gt; + This API is deprecated and should not be used.
&gt; + */
&gt; ++ (nullable instancetype)scriptFromUTF8File:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath JSC_API_DEPRECATED(&quot;Do not use this. Use +scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error: or +scriptOfType:inVirtualMachine:withSource:andSourceURL:andBytecodeCache:error: instead&quot;, macosx(JSC_MAC_TBA, JSC_MAC_TBA), ios(JSC_IOS_TBA, JSC_IOS_TBA));

Can you make sure you update the deprecation warnings for the new method names?

&gt; Source/JavaScriptCore/API/JSScript.h:76
&gt; ++ (nullable instancetype)scriptOfType:(JSScriptType)type inVirtualMachine:(JSVirtualMachine *)vm withSource:(NSString *)source andSourceURL:(NSURL *)sourceURL andBytecodeCache:(nullable NSURL *)cachePath error:(out NSError * _Nullable * _Nullable)error;

Per offline discussion we should move inVirtualMachine to the second to last argument. Since, that&apos;s not a particularly interesting parameter when choosing between the &quot;overloads&quot;.

&gt; Source/JavaScriptCore/API/JSScript.h:92
&gt; ++ (nullable instancetype)scriptOfType:(JSScriptType)type inVirtualMachine:(JSVirtualMachine *)vm memoryMappedFromASCIIFile:(NSURL *)filePath withSourceURL:(NSURL *)sourceURL andBytecodeCache:(nullable NSURL *)cachePath error:(out NSError * _Nullable * _Nullable)error;

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508705</commentid>
    <comment_count>28</comment_count>
      <attachid>362656</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 15:39:35 -0800</bug_when>
    <thetext>Created attachment 362656
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508707</commentid>
    <comment_count>29</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 15:42:16 -0800</bug_when>
    <thetext>Attachment 362656 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 18 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>1508718</commentid>
    <comment_count>30</comment_count>
      <attachid>362657</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 15:57:15 -0800</bug_when>
    <thetext>Created attachment 362657
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508723</commentid>
    <comment_count>31</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 16:01:57 -0800</bug_when>
    <thetext>Attachment 362657 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 18 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>1508730</commentid>
    <comment_count>32</comment_count>
      <attachid>362663</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-21 16:22:23 -0800</bug_when>
    <thetext>Created attachment 362663
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508737</commentid>
    <comment_count>33</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-21 16:26:19 -0800</bug_when>
    <thetext>Attachment 362663 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.c:1393:  Declaration has space between * and variable name in char* newCWD  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:2283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 18 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>1508858</commentid>
    <comment_count>34</comment_count>
      <attachid>362663</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-21 20:21:59 -0800</bug_when>
    <thetext>Comment on attachment 362663
patch for landing

Clearing flags on attachment: 362663

Committed r241929: &lt;https://trac.webkit.org/changeset/241929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508859</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-21 20:22:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361720</attachid>
            <date>2019-02-11 15:36:24 -0800</date>
            <delta_ts>2019-02-13 10:37:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194517-20190211153623.patch</filename>
            <type>text/plain</type>
            <size>35610</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NTk2NDUzY2QzNDY5YmNkYWY3Yzk0YjM5ZGNlNWU1NTQyMjlhNThjLi5lZTc3NTJiNWQ1NDg2MzAx
YjY5OTg5Y2FjMzNlYzQ1M2RiNzhlOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAxOS0wMi0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgSlNTY3JpcHQgU1BJIGZyb20gZmVlZGJhY2sKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOgorICAgICAg
ICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAo
SlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgor
ICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgIChldmFsdWF0ZVNjcmlwdCk6Cisg
ICAgICAgICgtW0pTQ29udGV4dCBldmFsdWF0ZVNjcmlwdDp3aXRoU291cmNlVVJMOl0pOgorICAg
ICAgICAoLVtKU0NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpdKToKKyAgICAgICAgKC1bSlNDb250
ZXh0IGNhY2hlQnl0ZWNvZGVGb3JKU1NjcmlwdDpyZWN1cnNpdmVseUNhY2hlTW9kdWxlRGVwZW5k
ZW5jaWVzOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9u
V2l0aFN0cmluZzpdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIEFQSS9KU1NjcmlwdC5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOndpdGhTb3VyY2U6d2l0aFVSTDppblZpcnR1YWxNYWNo
aW5lOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6XSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNjcmlw
dE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhVUkw6aW5WaXJ0dWFsTWFjaGlu
ZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAgICAoLVtKU1NjcmlwdCB1cmxdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IGpz
U291cmNlQ29kZTpdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgd3JpdGVDYWNoZTpdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQgd3JpdGVDYWNoZV0pOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU1Nj
cmlwdEludGVybmFsLmg6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVzdEJ5
dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkpOgorICAg
ICAgICAoK1tKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XSk6
CisgICAgICAgICgtW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGNvbnRleHQ6
ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWplY3RIYW5k
bGVyOl0pOgorICAgICAgICAodGVzdExvYWRCYXNpY0ZpbGUpOgorICAgICAgICAodGVzdEpTU2Ny
aXB0VVJMKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBjb25maWcu
aDoKKwogMjAxOS0wMS0zMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbQ01ha2VdW0pTQ10gQ2hhbmdpbmcgdWRfb3Bjb2RlLnB5IHNob3VsZCB0
cmlnZ2VyIGludm9raW5nIHVkX29wY29kZS5weQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0FQSUdsb2JhbE9iamVjdC5oCmluZGV4IDVkNWYxMmM3ZWJmMjg5OTQyZTY3ODYwN2YzN2Jh
YjljZTZjM2RkNjguLmExMjE0ZTcyMjlhN2JmMzI1ZjMxMWZlZjNjNzM0ZWFmZjUxZDc5N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKQEAgLTI3
LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1Mg
SlNTY3JpcHQ7CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0FQSUdsb2JhbE9iamVjdCA6
IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CkBAIC01NSw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0
KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKICAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9w
ZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1Zh
bHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOwogCisgICAgSlNWYWx1ZSBsb2FkQW5kRXZh
bHVhdGVKU1NjcmlwdE1vZHVsZShKU1NjcmlwdCAqc2NyaXB0KTsKKwogcHJpdmF0ZToKICAgICBK
U0FQSUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQppbmRleCBkNWMyMzY1
ZDA4NDcxNDhjODBmODk5MmJjMDQ0MzUyZjMxYmNiZjBlLi4wYWVhZjAxMjRiZDMxN2IzNGUyZjFi
Y2RkNmI0ZGI3N2RhYTczNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNB
UElHbG9iYWxPYmplY3QubW0KQEAgLTM0LDggKzM0LDEwIEBACiAjaW1wb3J0ICJFcnJvci5oIgog
I2ltcG9ydCAiRXhjZXB0aW9uLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2lt
cG9ydCAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVm
ZXJyZWQuaCIKICNpbXBvcnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpTUHJv
bWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJK
U1NvdXJjZUNvZGUuaCIKICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgpAQCAtMTYyLDkgKzE2
NCw5IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
RmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+
cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVk
LiIpKTsKIAogICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8
SlNTdHJpbmc+KHZtLCBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0
byogcmVzb2x2ZSA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCAxLCAicmVzb2x2ZSIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVj
dHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0ds
b2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsK
ICAgICAgICAgaWQgc2NyaXB0ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSkpOwogCkBAIC0xNzUsNyArMTc3LDE1IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2Ny
aXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU291cmNlQ29kZSogc291
cmNlID0gW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VDb2RlOm1vZHVs
ZUtleV07CisgICAgICAgIGNvbnN0IFN0cmluZyYgb2xkTW9kdWxlS2V5ID0gc291cmNlLT5zb3Vy
Y2VDb2RlKCkucHJvdmlkZXIoKS0+c291cmNlT3JpZ2luKCkuc3RyaW5nKCk7CisgICAgICAgIGlm
IChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xkTW9kdWxlS2V5KSAhPSBt
b2R1bGVLZXkpKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhl
YywgbWFrZVN0cmluZygiVGhlIHNhbWUgSlNTY3JpcHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlm
ZmVyZW50IGlkZW50aWZpZXJzLCBwcmV2aW91c2x5OiAiLCBvbGRNb2R1bGVLZXksICIgYW5kIG5v
dzogIiwgbW9kdWxlS2V5LnN0cmluZygpKSkpOworICAgICAgICAgICAgY2FsbChleGVjLCBkZWZl
cnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hv
dWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRl
ZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3MuYXBwZW5kKHNvdXJjZSk7CiAgICAg
ICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2
ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOwogICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgfSk7CkBAIC0yMTAsNiArMjIwLDIxIEBAIEpT
T2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVBy
b3BlcnRpZXMoSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOwogfQogCitK
U1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShK
U1NjcmlwdCAqc2NyaXB0KQoreworICAgIEFTU0VSVChzY3JpcHQudHlwZSA9PSBrSlNTY3JpcHRU
eXBlTW9kdWxlKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8ga2V5ID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIFtbc2NyaXB0IHVybF0gYWJzb2x1dGVTdHJpbmddKTsKKyAgICBKU0ludGVy
bmFsUHJvbWlzZSogcHJvbWlzZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShnbG9iYWxFeGVjKCks
IFtzY3JpcHQganNTb3VyY2VDb2RlOmtleV0tPnNvdXJjZUNvZGUoKSwganNVbmRlZmluZWQoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIHJlc3VsdCA9
IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJlc3VsdC0+cmVzb2x2ZShnbG9i
YWxFeGVjKCksIHByb21pc2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KIAogI2VuZGlm
IC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
Lm1tCmluZGV4IDUxOGZiODcyMzk4NDgzNDEyZmZhMWZiZGRjZmQ5ZmZhZTE2OGFmZjAuLmVhNjFh
NzUwYTU1MDdmMmVjOTM3MWM4ZGNhMmU1OTlmMjkwYzU1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0xMDMsMTcgKzEwMywzNyBAQAogICAgIHJldHVybiBbc2Vs
ZiBldmFsdWF0ZVNjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVSTDpuaWxdOwogfQogCi0tIChKU1Zh
bHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5T
VVJMICopc291cmNlVVJMCitzdGF0aWMgSlNWYWx1ZSAqZXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
ICpjb250ZXh0LCBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHNvdXJjZSwgUmVmUHRyPE9wYXF1ZUpT
U3RyaW5nPiB1cmwpCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51bGxwdHI7
CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQtPm1fY29u
dGV4dCwgc291cmNlLmdldCgpLCBudWxscHRyLCB1cmwuZ2V0KCksIDAsICZleGNlcHRpb25WYWx1
ZSk7CisKKyAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBbY29udGV4dCB2
YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisK
Ky0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQgd2l0aFNvdXJj
ZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3sKICAgICBhdXRvIHNjcmlwdEpTID0gT3BhcXVlSlNT
dHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQpOwogICAgIGF1dG8gc291cmNlVVJMSlMgPSBPcGFxdWVK
U1N0cmluZzo6dHJ5Q3JlYXRlKFtzb3VyY2VVUkwgYWJzb2x1dGVTdHJpbmddKTsKLSAgICBKU1Zh
bHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUy5nZXQo
KSwgbnVsbHB0ciwgc291cmNlVVJMSlMuZ2V0KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisgICAg
cmV0dXJuIGV2YWx1YXRlU2NyaXB0KHNlbGYsIHNjcmlwdEpTLCBzb3VyY2VVUkxKUyk7Cit9CiAK
LSAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCi0gICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNT
Y3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0Cit7CisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1Nj
cmlwdFR5cGVQcm9ncmFtKSB7CisgICAgICAgIFN0cmluZyBzb3VyY2UgPSBbc2NyaXB0IHNvdXJj
ZV07CisgICAgICAgIHJldHVybiBldmFsdWF0ZVNjcmlwdChzZWxmLCBPcGFxdWVKU1N0cmluZzo6
dHJ5Q3JlYXRlKFdURk1vdmUoc291cmNlKSksIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoW1tz
Y3JpcHQgdXJsXSBhYnNvbHV0ZVN0cmluZ10pKTsKKyAgICB9CiAKLSAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlND
OjpKU0FQSUdsb2JhbE9iamVjdCo+KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwor
ICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
TmV3UHJvbWlzZVJlamVjdGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZy
b21NZXNzYWdlOkAiQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IG1vZHVsZSBsb2FkaW5nIiBpbkNv
bnRleHQ6c2VsZl0gaW5Db250ZXh0OnNlbGZdOworCisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVl
V2l0aEpTVmFsdWVSZWY6dG9SZWYodm0sIGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2YWx1YXRlSlNT
Y3JpcHRNb2R1bGUoc2NyaXB0KSkgaW5Db250ZXh0OnNlbGZdOwogfQogCiAtICh2b2lkKXNldEV4
Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCkBAIC0yNDQsNiArMjY0LDE5IEBACiAgICAgbV9tb2R1
bGVMb2FkZXJEZWxlZ2F0ZSA9IG1vZHVsZUxvYWRlckRlbGVnYXRlOwogfQogCistIChCT09MKWNh
Y2hlQnl0ZWNvZGVGb3JKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQgcmVjdXJzaXZlbHlDYWNo
ZU1vZHVsZURlcGVuZGVuY2llczooQk9PTClyZWN1cnNpdmUKK3sKKyAgICBpZiAocmVjdXJzaXZl
KQorICAgICAgICByZXR1cm4gW3NlbGYgYm9vbEZyb21Ob3RpZnlFeGNlcHRpb246W1tKU1ZhbHVl
IHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJjYWNoaW5nIGJ5dGVjb2RlIHJlY3Vyc2l2
ZWx5IGlzIG5vdCBzdXBwb3J0ZWQgeWV0ISIgaW5Db250ZXh0OnNlbGZdIEpTVmFsdWVSZWZdXTsK
KworICAgIFN0cmluZyBlcnJvciB7IH07CisgICAgW3NjcmlwdCB3cml0ZUNhY2hlOmVycm9yXTsK
KyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gW3NlbGYgYm9vbEZyb21O
b3RpZnlFeGNlcHRpb246W1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6ZXJy
b3IgaW5Db250ZXh0OnNlbGZdIEpTVmFsdWVSZWZdXTsKKworICAgIHJldHVybiBZRVM7Cit9CisK
IEBlbmQKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQpAQCAt
MzAwLDYgKzMzMywxMSBAQAogICAgIHJldHVybiBOTzsKIH0KIAorLSAoSlNWYWx1ZSAqKXZhbHVl
RnJvbU5vdGlmeUV4Y2VwdGlvbldpdGhTdHJpbmc6KFN0cmluZyYpc3RyaW5nCit7CisgICAgcmV0
dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdF
cnJvckZyb21NZXNzYWdlOnN0cmluZyBpbkNvbnRleHQ6c2VsZl0uSlNWYWx1ZVJlZl07Cit9CisK
IC0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFja0Rh
dGEgY2FsbGVlVmFsdWU6KEpTVmFsdWVSZWYpY2FsbGVlVmFsdWUgdGhpc1ZhbHVlOihKU1ZhbHVl
UmVmKXRoaXNWYWx1ZSBhcmd1bWVudENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVu
dHM6KGNvbnN0IEpTVmFsdWVSZWYgKilhcmd1bWVudHMKIHsKICAgICBUaHJlYWQmIHRocmVhZCA9
IFRocmVhZDo6Y3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaAppbmRleCBkNGUyMDZiMzM1NzVlOWZhNmQ0MTgyZTllMWFkODk0MDU2OGE4Njc3
Li45MThjMzE3ZjkxOGNkNjgzMTdlNTVjMzA3YTVmNGM3NjI2MGUxMGQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaApAQCAtNzQsNiArNzQsMjUgQEAK
IC8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0IHdpbGwgdXNlIHdoZW4gdHJ5
aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdhdGUgd2lsbCBiZSBpZ25vcmVk
IGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdlYlZpZXcuICovCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+IG1vZHVsZUxvYWRlckRlbGVn
YXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RC
QSkpOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENhY2hlIHRoZSBieXRlY29kZSBmb3Ig
YSBKU1NjcmlwdC4KKyBAcGFyYW0gc2NyaXB0IFRoZSBKU1NjcmlwdCB0byBjYWNoZS4KKyBAcGFy
YW0gcmVjdXJzaXZlIFdoZXRoZXIgY2FjaGluZyBzaG91bGQgYWxzbyBjYWNoZSBhbnkgZGVwZW5k
ZW5jaWVzIG9mIGEgbW9kdWxlIEpTU2NyaXB0LgorIEBkaXNjdXNzaW9uIElmIHRoZXJlIHdhcyBh
IHByb2JsZW0gY2FjaGluZyB0aGUgYnl0ZWNvZGUgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZmFs
c2UgYW5kIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHNldCBvbiB0aGUgY29udGV4dC4KKyAqLworLSAo
Qk9PTCljYWNoZUJ5dGVjb2RlRm9ySlNTY3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0IHJlY3Vyc2l2
ZWx5Q2FjaGVNb2R1bGVEZXBlbmRlbmNpZXM6KEJPT0wpcmVjdXJzaXZlOworCisvKiEKKyBAbWV0
aG9kCisgQGFic3RyYWN0IFJ1biBhIEpTU2NyaXB0LgorIEBwYXJhbSBzY3JpcHQgdGhlIEpTU2Ny
aXB0IHRvIGV2YWx1YXRlLgorIEBkaXNjdXNzaW9uIElmIHRoZSBwcm92aWRlZCBKU1NjcmlwdCB3
YXMgY3JlYXRlZCB3aXRoIEpTU2NyaXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4g
c3luY2hyb25vdXNseSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90
aGVyd2lzZSwgaWYgdGhlIHNjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIEpTU2NyaXB0VHlwZU1vZHVs
ZSwgdGhlIG1vZHVsZSB3aWxsIGJlIHJ1biBhc3luY2hyb25vdXNseSBhbmQgd2lsbCByZXR1cm4g
YSBwcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG1vZHVsZSBhbmQgYW55IHRyYW5zaXRpdmUgZGVw
ZW5kZW5jaWVzIGFyZSBsb2FkZWQuIFRoZSBtb2R1bGUgbG9hZGVyIHdpbGwgdHJlYXQgdGhlIHNj
cmlwdCBhcyBpZiBpdCBoYWQgYmVlbiByZXR1cm5lZCBmcm9tIGEgZGVsZWdhdGUgY2FsbCB0byBt
b2R1bGVMb2FkZXJEZWxlZ2F0ZSB3aXRoIGl0cyBpZGVudGVmaWVyIHNldCB0byB0aGUgcmVzdWx0
IG9mIDxjb2RlPltzY3JpcHQgdXJsXTwvY29kZT4uIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlw
dCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpT
U2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQuaAppbmRleCA0YWFhODk5OGJiYzE4NDM2MDNmOGFiNTg5NDlhNzE2
NWM0OTc2MDZmLi5jZTc2ZTE5NWY5MDlkNDY0Yjc1NTkxNmY5ODNkOWVmNGQxZTIyODBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCkBAIC0zMSw2ICszMSwxOCBAQCBOU19BU1NV
TUVfTk9OTlVMTF9CRUdJTgogCiBAY2xhc3MgSlNWaXJ0dWFsTWFjaGluZTsKIAorLyohCisgQGVu
dW0gSlNTY3JpcHRUeXBlCisgQGFic3RyYWN0ICAgICBBIGNvbnN0YW50IGlkZW50aWZ5aW5nIHRo
ZSBleGVjdXRpb24gdHlwZSBvZiBhIEpTU2NyaXB0LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0
VHlwZVByb2dyYW0gIFRoZSB0eXBlIG9mIGEgbm9ybWFsIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyBA
Y29uc3RhbnQgICAgIGtKU1NjcmlwdFR5cGVNb2R1bGUgICBUaGUgdHlwZSBvZiBhIG1vZHVsZSBK
YXZhU2NyaXB0IHByb2dyYW0uCisgKi8KK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEpTU2Ny
aXB0VHlwZSkgeworICAgIGtKU1NjcmlwdFR5cGVQcm9ncmFtLAorICAgIGtKU1NjcmlwdFR5cGVN
b2R1bGUsCit9OworCisKIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwg
aW9zKEpTQ19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAogCkBAIC00
MSw3ICs1Myw3IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9z
KEpTQ19JT1NfVEJBKSkKICBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlw
dCBjYW4gYmUgZXZhbHVhdGVkIGluLgogIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCiAgKi8KLSsg
KG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJj
ZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisrIChudWxsYWJsZSBp
bnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIEpTQ19BUElfREVQUkVDQVRFRChtYWNvc3go
SlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKIAogLyohCiAgQG1ldGhvZApAQCAtNTUs
MTQgKzY3LDQ4IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9z
KEpTQ19JT1NfVEJBKSkKIAogIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0
aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlw
ZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICop
Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQ
YXRoOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29z
eChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOwogCiAKIC8qIQogIFRoaXMgaXMgZGVw
cmVjYXRlZCBhbmQgaXMgZXF1aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVh
bE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgogICovCi0rIChudWxs
YWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGlu
VmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51
bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxl
IE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21V
VEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RF
UFJFQ0FURUQobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisKKy8qIQor
IEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQg
dmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291
cmNlLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRoZSBzY3Jp
cHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gdXJsIFRoZSBVUkwgdGhhdCBz
aG91bGQgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBKU1NjcmlwdC4KKyBAcGFyYW0gdm0gVGhl
IEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJh
bSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxk
IGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJhbSBlcnJvciBBIGRlc2NyaXB0aW9u
IG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRoZSByZXN1bHQgaXMg
bmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNl
dHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5n
ICopc291cmNlIHdpdGhVUkw6KE5TVVJMICopdXJsIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVh
bE1hY2hpbmUgKil2bSBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0
aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CisKKy8q
IQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZp
ZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEgY29kZXNpZ25pbmcgYW5kIGJ5dGVj
b2RlIGNhY2hpbmcuCisgQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2Uu
CisgQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3Vy
Y2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHVybCBUaGUgVVJMIHRoYXQgc2hvdWxkIGJl
IHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgSlNTY3JpcHQuCisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1
YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KKyBAcGFyYW0gY2FjaGVQ
YXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBm
b3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkg
dGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KKyBA
cmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0
aCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhl
IGxpZmVjeWNsZSBvZiB2bS4gVGhpcyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBm
b3IgdGhlIHNvdXJjZS4KKworIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0
aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlw
ZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZp
bGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFVSTDooTlNVUkwgKil1cmwgaW5WaXJ0dWFsTWFjaGlu
ZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJM
ICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSll
cnJvcjsKKworLyohIEBhYnN0cmFjdCBUaGUgdXJsIHByb3ZpZGVkIGZvciB0aGUgc291cmNlIG9m
IHRoZSBKU1NjcmlwdCBkdXJpbmcgY3JlYXRpb24uICovCitAcHJvcGVydHkgKHJlYWRvbmx5KSBO
U1VSTCAqdXJsOwogCisvKiEgQGFic3RyYWN0IFRoZSB0eXBlIG9mIHNjcmlwdCBwcm92aWRlZCBk
dXJpbmcgY3JlYXRpb24uICovCitAcHJvcGVydHkgKHJlYWRvbmx5KSBKU1NjcmlwdFR5cGUgdHlw
ZTsKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdC5tbQppbmRleCBmZWY0NDZkZWRmODZiMjQ1MGFhN2Y4M2YyYmEzZWU3MGE4ODUyZmUw
Li42Mjc0YTBhNDRmOTIzNTBkNjhjMjg1NmU0MTBhMGJiN2U3MDc5NjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KQEAgLTM3LDE1ICszNywxOSBAQAogI2ltcG9ydCAiU3lt
Ym9sLmgiCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIAorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVt
Lmg+CisKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3Jp
cHQgewogICAgIF9fd2VhayBKU1ZpcnR1YWxNYWNoaW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAg
IEpTU2NyaXB0VHlwZSBtX3R5cGU7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9t
YXBwZWRTb3VyY2U7CiAgICAgU3RyaW5nIG1fc291cmNlOwotICAgIE5TVVJMKiBtX2NhY2hlUGF0
aDsKKyAgICBOU1VSTCAqbV91cmw7CisgICAgTlNVUkwgKm1fY2FjaGVQYXRoOwogICAgIEpTQzo6
Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpT
U291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fbW9k
dWxlS2V5OwogfQogCiArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcg
Kilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtCkBAIC0xMTYs
NiArMTIwLDQ5IEBAIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPExDaGFyPiYKICAgICByZXR1cm4gW0pTU2NyaXB0
IHNjcmlwdEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29k
ZVNpZ25pbmc6Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0K
IAorKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNv
dXJjZTooTlNTdHJpbmcgKilzb3VyY2Ugd2l0aFVSTDooTlNVUkwgKil1cmwgaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2Fj
aGVQYXRoIGVycm9yOihOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQt
Pm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1
bHQtPm1fdXJsID0gW3VybCBhYnNvbHV0ZVVSTF07CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9
IGNhY2hlUGF0aDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisrIChpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihO
U1VSTCAqKWZpbGVQYXRoIHdpdGhVUkw6KE5TVVJMICopdXJsIGluVmlydHVhbE1hY2hpbmU6KEpT
VmlydHVhbE1hY2hpbmUgKil2bSBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBl
cnJvcjooTlNFcnJvciAqKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAg
VVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOworICAgIGlmICghZmlsZVBh
dGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIGZpbGVEYXRhKGZp
bGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5z
aXplKCkpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1
YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+
bV9zb3VyY2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUo
KSkpOworICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZNb3ZlKGZpbGVEYXRhKTsKKyAg
ICByZXN1bHQtPm1fdXJsID0gdXJsOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBh
dGg7CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0g
KE5TVVJMICopdXJsCit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCiAtICh2b2lkKWRlYWxsb2MK
IHsKICAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUu
b3duZWQoKSkKQEAgLTE1MSwyNSArMTk4LDYgQEAgc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhD
b250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8TENoYXI+JgogCiAg
ICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUg
fTsKIH0KLQotLSAodm9pZCl3cml0ZUNhY2hlCi17Ci0gICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUu
c2l6ZSgpIHx8ICFtX2NhY2hlUGF0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpQYXJz
ZXJFcnJvciBlcnJvcjsKLSAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VDb2Rl
KCksIGVycm9yKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50IGZkID0gb3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBP
X1dST05MWSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAg
aW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAg
ICAgICB3cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUu
c2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7Ci19Ci0KIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIEpT
U2NyaXB0KEludGVybmFsKQpAQCAtMTkxLDEwICsyMTksOCBAQCBzdGF0aWMgYm9vbCBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxMQ2hh
cj4mCiAKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpbW9kdWxlS2V5CiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAg
IEFTU0VSVChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1Nv
dXJjZUNvZGUpCiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKLSAgICB9CiAK
ICAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hpbmUudm07CiAgICAgVGV4dFBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24geyB9OwpAQCAtMjAyLDEwICsyMjgsNDEgQEAgc3RhdGljIGJvb2wgZmls
bEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8
TENoYXI+JgogICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJv
dmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9u
Lm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJj
ZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUp
KTsKICAgICBtX2pzU291cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYg
d3JpdGVDYWNoZV07CiAgICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAorLSAoQk9PTCl3cml0
ZUNhY2hlOihTdHJpbmcmKWVycm9yCit7CisKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXpl
KCkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAg
ICAgIGVycm9yID0gIm5vIGNhY2hlIHBhdGggcHJvdmlkZWQiOworICAgICAgICByZXR1cm4gTk87
CisgICAgfQorCisgICAgSlNDOjpQYXJzZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBhdXRvIGtl
eSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92aXJ0dWFsTWFjaGluZS52bSwgW1tz
ZWxmIHVybF0gYWJzb2x1dGVTdHJpbmddKTsKKyAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpn
ZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNl
Q29kZTprZXldLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICBpZiAocGFyc2VyRXJy
b3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGVycm9yID0gInVuYWJsZSB0byBnZW5lcmF0ZSBjb21w
bGV0ZSBieXRlY29kZSI7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaW50IGZkID0g
b3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2
Nik7CisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5h
YmxlIHRvIG9wZW4gZmlsZTogIiwgbV9jYWNoZVBhdGgucGF0aC5VVEY4U3RyaW5nLCAiIGR1ZSB0
byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0K
KyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7CisgICAg
aWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0gIlVuYWJsZSB0byBsb2NrIHRoZSBjYWNo
ZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2UuIjsKKyAgICBlbHNlCisgICAgICAgIHdy
aXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRlY29kZS5zaXplKCkp
OworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7Cit9CisKIEBlbmQKIAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCmluZGV4IDY2
YTc1ZTI2ZTUyYTc2YmQyZDA4ODk4MWZjYTBiOGMxYzk0NTU0MDIuLjM3Zjc1MTc0MjlmZWIzYWJj
MTBhZTA5Yjg2MTJkYTI3ZjcwNjczNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRJbnRlcm5hbC5oCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFN0cmluZzsKIC0gKGNv
bnN0IFdURjo6U3RyaW5nJilzb3VyY2U7CiAtIChjb25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKilj
YWNoZWRCeXRlY29kZTsKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5OworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcm
KWVycm9yOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdEluY2x1ZGVzLm0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RJbmNsdWRlcy5tCmluZGV4IDYxZjA1ZGFiMTI3MmYzZjdhYzdiN2JlNzJkZDQ3YTIwZDk3Yzgz
YmUuLjA2ZDNmOGM2OGI0Njg5NjhhMWQ5OTkwZGZmNWQ0MDBmZTM3ZGJiY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQpAQCAtMjcsNiArMjcs
NyBAQAogLy8gU2luY2Ugd2UgaW5jbHVkZSBmaWxlcyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRocm91
Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBub24tcmV3cml0dGVuIHZhbHVl
cy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19B
VkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogI2RlZmluZSBK
U0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKaW5kZXggMDFmOTRjZDNiYmUw
YmM4YTQwMTM1MzBhMzlhNGM1MDUzM2U5ZmNiYS4uMjhkMDI4N2FkOTUzNTI4NGNjZmFjZDY4ODRh
ZjlkMDRmYjhkOGUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLmMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
LmMKQEAgLTY3LDcgKzY3LDcgQEAKICNlbmRpZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
LXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNv
bnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmls
dGVyKTsKQEAgLTEzODAsMTEgKzEzODAsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAorICAgIGNvbnN0IGNoYXIqIGZp
bHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5VTEw7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKLSAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworICAgIHRlc3RPYmplY3RpdmVDQVBJKGZpbHRl
cik7CiAjZW5kaWYKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsx
XSA6IE5VTEw7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRlc3RDQVBJVmlhQ3BwKGZpbHRlcikpOwog
ICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4IDgzNDkxMzE2MWJjZTU3ZGFmMjNjZDg4Mjc0N2Rj
NDlhZDMyNjFjMmEuLjQ4NTY2ZmIyMWY5MjY5OWJkN2MwZmUwODU5YjFlOWRhYmVmNmU0YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KQEAgLTQxLDEyICs0
MSwxNCBAQAogI2ltcG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgw
OS5oIgogCisjaW1wb3J0IDxsaWJwcm9jLmg+CiAjaW1wb3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0
IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5Rm9vdHByaW50Lmg+CiAjaW1wb3J0IDx3dGYv
T3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+CiAKKwogZXh0ZXJuICJDIiB2b2lk
IEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwog
ZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0Nv
bnRleHRSZWYpOwogCkBAIC01NCw3ICs1Niw3IEBAIGV4dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFz
X3NpZ25hdHVyZShpZCk7CiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJl
KGlkKTsKIAogZXh0ZXJuIGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hh
ciopOwogZXh0ZXJuICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKQEAgLTE5ODUsOSArMTk4Nyw5IEBAIHN0YXRpYyB2b2lk
IHRlc3RCeXRlY29kZUNhY2hlKCkKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgTlNV
UkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOk5TVGVtcG9yYXJ5RGly
ZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKIAotICAgICAgICBOU1N0cmluZyogZm9vU291cmNl
ID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47
IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3Rv
cnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsKLSAgICAgICAgTlNTdHJpbmcqIGJh
elNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsg
Z2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiOworICAgICAgICBO
U1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsg
ZXhwb3J0IGxldCBuID0gbnVsbDsiOworICAgICAgICBOU1N0cmluZyogYmFyU291cmNlID0gQCJp
bXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9ICgpID0+IG47
IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBc
Ii4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0
IGV4cCA9IGZvbygpOyI7CiAKICAgICAgICAgTlNVUkwqIGZvb1BhdGggPSBbdGVtcERpcmVjdG9y
eSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMiXTsKICAgICAgICAgTlNVUkwq
IGJhclBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJi
YXIuanMiXTsKQEAgLTIwMDIsMTggKzIwMDQsMzQgQEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVjb2Rl
Q2FjaGUoKQogICAgICAgICBbYmF6U291cmNlIHdyaXRlVG9VUkw6YmF6UGF0aCBhdG9taWNhbGx5
Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogCiAgICAgICAg
IGF1dG8gYmxvY2sgPSBeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwg
SlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7Ci0gICAgICAgICAgICBpZiAoW2lk
ZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCi0g
ICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2Ny
aXB0RnJvbUFTQ0lJRmlsZTpmb29QYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRo
XV1dOwotICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAi
ZmlsZTovLy9mb28uanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5WaXJ0dWFsTWFj
aGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNv
ZGVDYWNoZTpiYXJDYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmll
ciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdKQotICAg
ICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlw
dEZyb21BU0NJSUZpbGU6YmF6UGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1h
Y2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aF1d
XTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNr
Q2FjaGUoKSA9IHRydWU7CisgICAgICAgICAgICBKU1NjcmlwdCAqcmVzdWx0ID0gbmlsOworICAg
ICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGlyZWN0
b3J5L2Jhci5qcyJdKSB7CisgICAgICAgICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Cisg
ICAgICAgICAgICAgICAgYXV0byBzb3VyY2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRz
T2ZVUkw6YmFyUGF0aCBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9y
XTsKKyAgICAgICAgICAgICAgICBjaGVja1Jlc3VsdChAIm9wZW5pbmcgdGhlIGZpbGUgc291cmNl
IGZpbGUgc2hvdWxkIHN1Y2NlZWQiLCBzb3VyY2UgJiYgIWVycm9yKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgd2l0
aFNvdXJjZTpzb3VyY2Ugd2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8vZGly
ZWN0b3J5L2Jhci5qcyJdIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBh
bmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgfSBl
bHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKSB7
CisgICAgICAgICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZVUkw6Zm9vUGF0aCBl
bmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9yXTsKKyAgICAgICAgICAg
ICAgICBjaGVja1Jlc3VsdChAIm9wZW5pbmcgdGhlIGZpbGUgc291cmNlIGZpbGUgc2hvdWxkIHN1
Y2NlZWQiLCBzb3VyY2UgJiYgIWVycm9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbSlNT
Y3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgd2l0aFNvdXJjZTpzb3VyY2Ug
d2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZpbGU6Ly8vZm9vLmpzIl0gaW5WaXJ0dWFs
TWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQ
YXRoIGVycm9yOm5pbF07CisgICAgICAgICAgICB9IGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1
YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pIHsKKyAgICAgICAg
ICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICAgICAgICAgICAgICBhdXRvIHNvdXJj
ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZlVSTDpiYXpQYXRoIGVuY29kaW5nOk5T
QVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjomZXJyb3JdOworICAgICAgICAgICAgICAgIGNoZWNr
UmVzdWx0KEAib3BlbmluZyB0aGUgZmlsZSBzb3VyY2UgZmlsZSBzaG91bGQgc3VjY2VlZCIsIHNv
dXJjZSAmJiAhZXJyb3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtKU1NjcmlwdCBzY3Jp
cHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSB3aXRoU291cmNlOnNvdXJjZSB3aXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSBpblZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgYW5kQnl0ZWNvZGVDYWNoZTpiYXpD
YWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pT
VmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4
dDpjb250ZXh0XV1dOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFtjb250ZXh0IGNhY2hlQnl0ZWNvZGVGb3JKU1NjcmlwdDpyZXN1bHQgcmVjdXJz
aXZlbHlDYWNoZU1vZHVsZURlcGVuZGVuY2llczpOT107CisgICAgICAgICAgICBbcmVzb2x2ZSBj
YWxsV2l0aEFyZ3VtZW50czpAW3Jlc3VsdF1dOwogICAgICAgICB9OwogCiAgICAgICAgIEBhdXRv
cmVsZWFzZXBvb2wgewotICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgp
ID0gdHJ1ZTsKICAgICAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxl
Z2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6YmxvY2tdOwogICAgICAgICAgICAgY29udGV4
dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CiAgICAgICAgICAgICBKU1ZhbHVlICpw
cm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4uL290aGVyRGlyZWN0
b3J5L2Jhei5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Rp
cmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CkBAIC0yMDIzLDE1ICsyMDQxLDE5IEBAIHN0YXRp
YyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1h
bmFnZXIqIGZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAg
ICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0g
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwot
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpu
aWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBl
cnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hl
UGF0aCBlcnJvcjpuaWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAg
ICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6YmFyUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdl
ciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxs
ICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07
CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJD
YWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIg
cmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jl
c3VsdChAIlJlbW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOwogICAg
IH0KIH0KIAorCisKIEBpbnRlcmZhY2UgSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIDogSlND
b250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgogCiArIChpbnN0YW5jZXR5cGUpbmV3Q29u
dGV4dDsKQEAgLTIwNzgsNyArMjEwMCw3IEBAIHN0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1Nj
cmlwdHMoKQogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKK3N0YXRp
YyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKICAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdh
dGUgbmV3Q29udGV4dF07CkBAIC0yMDg5LDM0ICsyMTExLDEwOSBAQCBzdGF0aWMgdm9pZCB0ZXN0
TG9hZEJhc2ljRmlsZSgpCiAgICAgfQogfQogCi12b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKKwor
QGludGVyZmFjZSBKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4
dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRl
bGVnYXRlIHsKK30KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQKK3sKKyAgICBhdXRvICpy
ZXN1bHQgPSBbW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0
XTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3
aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpT
VmFsdWUgKilyZWplY3QKK3sKKyAgICBOU1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpbaWRlbnRpZmllciB0b1N0cmluZ11dOworICAgIGF1dG8gKnNjcmlwdCA9IFtKU1Njcmlw
dCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlG
aWxlOmZpbGVQYXRoIHdpdGhVUkw6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgaWYgKHNj
cmlwdCkKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAg
ICBlbHNlCisgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiVW5hYmxlIHRvIGNyZWF0ZSBTY3JpcHQiIGluQ29u
dGV4dDpjb250ZXh0XV1dOworfQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNG
aWxlKCkKK3sKKyAgICBzaXplX3QgY291bnQgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0Nf
UElETElTVEZEUywgMCwgMCwgMCk7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1
dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29u
dGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0Owor
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy4vYmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07
CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0
OmNvbnRleHRdOworICAgICAgICBzaXplX3QgYWZ0ZXJDb3VudCA9IHByb2NfcGlkaW5mbyhnZXRw
aWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJK
U1NjcmlwdCBzaG91bGQgbm90IGhvbGQgYSBmaWxlIGRlc2NyaXB0b3IiLCBjb3VudCA9PSBhZnRl
ckNvdW50KTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51
bGwpOworICAgIH0KKyAgICBzaXplX3QgYWZ0ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBS
T0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0
b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRlciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNv
dW50ID09IGFmdGVyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTU2NyaXB0VVJMKCkKK3sKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqdm0gPSBbW0pTVmlydHVhbE1hY2hp
bmUgYWxsb2NdIGluaXRdOworICAgICAgICBOU1VSTCAqdXJsID0gcmVzb2x2ZVBhdGhUb1Njcmlw
dHMoKTsKKyAgICAgICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNT
Y3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOkAiIiB3aXRoVVJMOnVybCBpblZpcnR1YWxNYWNo
aW5lOnZtIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVz
dWx0KEAiSlNTY3JpcHQgZnJvbSBzb3VyY2Ugc2hvdWxkIHVzZSB0aGUgVVJMIHByb3ZpZGVkLiIs
IFtbc2NyaXB0LnVybCBhYnNvbHV0ZVN0cmluZ10gY29tcGFyZTpbdXJsIGFic29sdXRlU3RyaW5n
XV0gPT0gTlNPcmRlcmVkU2FtZSk7CisKKworICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2Ny
aXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpb
dXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIi4vYmFzaWMuanMiIGlzRGlyZWN0b3J5
Ok5PXSB3aXRoVVJMOnVybCBpblZpcnR1YWxNYWNoaW5lOnZtIGFuZEJ5dGVjb2RlQ2FjaGU6bmls
IGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiSlNTY3JpcHQgZnJvbSBtYXBwZWQg
ZmlsZSBzaG91bGQgdXNlIHRoZSBVUkwgcHJvdmlkZWQuIiwgW1tzY3JpcHQudXJsIGFic29sdXRl
U3RyaW5nXSBjb21wYXJlOlt1cmwgYWJzb2x1dGVTdHJpbmddXSA9PSBOU09yZGVyZWRTYW1lKTsK
KyAgICB9Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgXAorICAgICAgICBpZiAoIXNob3Vs
ZFJ1bigjdGVzdCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIE5TTG9nKEAiJXMu
Li5cbiIsICN0ZXN0KTsgXAorICAgICAgICB0ZXN0OyBcCisgICAgICAgIE5TTG9nKEAiJXM6IGRv
bmUuXG4iLCAjdGVzdCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordm9pZCB0ZXN0T2JqZWN0
aXZlQ0FQSShjb25zdCBjaGFyKiBmaWx0ZXIpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVj
dGl2ZS1DIEFQSSIpOwogCi0gICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKLSAgICBydW5K
SVRUaHJlYWRMaW1pdFRlc3RzKCk7CisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNo
YXIqIHRlc3QpIC0+IGJvb2wgeworICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgcmV0
dXJuIHN0cmNhc2VzdHIodGVzdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fTsKKworICAgIFJVTihjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpKTsKKyAgICBSVU4ocnVuSklU
VGhyZWFkTGltaXRUZXN0cygpKTsKKworICAgIFJVTih0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0
ZVNjcmlwdFVSTCgpKTsKKyAgICBSVU4odGVzdEZldGNoKCkpOworICAgIFJVTih0ZXN0RmV0Y2hX
aXRoVHdvQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkpOworICAg
IFJVTih0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKSk7CisgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hl
KCkpOwogCi0gICAgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0
ZXN0RmV0Y2goKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hX
aXRoVGhyZWVDeWNsZSgpOwotICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RC
eXRlY29kZUNhY2hlKCk7CisgICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkp
OworICAgIFJVTih0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExv
YWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZl
dGNoKCk7CisgICAgUlVOKHRlc3RKU1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGlu
ZwotICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7Ci0KLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJl
c29sdXRpb246OlJlc29sdmVFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0
aW9uOjpSZWplY3RFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZXNvbHZlTGF0ZSk7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RM
YXRlKTsKLSAgICBwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VDcmVh
dGVSZXNvbHZlZCgpOwotICAgIHByb21pc2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFsbGVs
UHJvbWlzZVJlc29sdmVUZXN0KCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJ
KCkpOworICAgIFJVTih0ZXN0TG9hZEJhc2ljRmlsZSgpKTsKKworICAgIFJVTihwcm9taXNlV2l0
aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0
aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRo
RXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhF
eGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VSZWplY3RP
bkpTRXhjZXB0aW9uKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7CisgICAg
UlVOKHByb21pc2VDcmVhdGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVz
b2x2ZVRlc3QoKSk7CiAKICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb25maWcuaAppbmRleCBlMzY0MzkwZmRkMGY3ZDQ1NzdkY2UxZTQ2ODgzYjdlMTI3ZWE1YzBj
Li5mYTFiOGE5N2ZkOWU0N2FkNGJjMjUwYjA1NjlkYWE4ZjBiNzk3NTdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2NvbmZpZy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUo
Li4uKQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikgSlNfRVhQT1JUCisjZGVmaW5l
IEpTQ19BUElfREVQUkVDQVRFRCguLi4pCiAvLyBVc2UgemVybyBzaW5jZSBpdCB3aWxsIGJlIGxl
c3MgdGhhbiBhbnkgcG9zc2libGUgdmVyc2lvbiBudW1iZXIuCiAjZGVmaW5lIEpTQ19NQUNfVkVS
U0lPTl9UQkEgMAogI2RlZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJBIDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361924</attachid>
            <date>2019-02-13 10:37:34 -0800</date>
            <delta_ts>2019-02-18 15:55:28 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-194517-20190213103733.patch</filename>
            <type>text/plain</type>
            <size>40123</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NTk2NDUzY2QzNDY5YmNkYWY3Yzk0YjM5ZGNlNWU1NTQyMjlhNThjLi4xMmVkYWFlM2UwNGE0ZWVh
YjczZmI5MWI4NTM5MTBhNTM2YWU3ZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAxOS0wMi0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgSlNTY3JpcHQgU1BJIGZyb20gZmVlZGJhY2sKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyB0
aGUgU1BJIGZvciBjcmVhdGluZyBzY3JpcHRzIHRvIHdvcmsgd2l0aCBub24tc2NyaXB0CisgICAg
ICAgIGZpbGUuIFRoZXJlIGFyZSB0d28gbWFpbiBuZXcgbWV0aG9kcyBmb3IgY3JlYXRpbmcgc2Ny
aXB0cyBvbmUgdGhhdAorICAgICAgICB0YWtlcyBhbiBOU1N0cmluZyBhcyBzb3VyY2UgYW5kIGFu
b3RoZXIgdGhhdCB0YWtlcyBhIHBhdGggdG8gYQorICAgICAgICBmaWxlIHdoaWNoIGl0IG1lbW9y
eSBtYXBzIGluIGFzIHRoZSBzb3VyY2UuIFRoZXJlIGlzIGFsc28gYSBuZXcKKyAgICAgICAgbWV0
aG9kIGZvciBleHBsaWNpdGx5IGNhY2hpbmcgYnl0ZWNvZGUgZm9yIGEgc2NyaXB0LiBMYXN0bHks
IHRoZXJlCisgICAgICAgIGlzIG5vdyBhIG1ldGhvZCBvbiBKU0NvbnRleHQgdGhhdCB3aWxsIHJ1
biBhIEpTU2NyaXB0IGJhc2VkIG9uCisgICAgICAgIHdoZXRoZXIgb3Igbm90IHRoZSBzY3JpcHQg
aXMgYSBtb2R1bGUgb3IgcHJvZ3JhbSBleGVjdXRhYmxlLgorCisgICAgICAgICogQVBJL0pTQVBJ
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOgorICAg
ICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAg
ICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUp
OgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgIChldmFsdWF0ZVNjcmlwdCk6
CisgICAgICAgICgtW0pTQ29udGV4dCBldmFsdWF0ZVNjcmlwdDp3aXRoU291cmNlVVJMOl0pOgor
ICAgICAgICAoLVtKU0NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpdKToKKyAgICAgICAgKC1bSlND
b250ZXh0IGNhY2hlQnl0ZWNvZGVGb3JKU1NjcmlwdDpyZWN1cnNpdmVseUNhY2hlTW9kdWxlRGVw
ZW5kZW5jaWVzOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uV2l0aFN0cmluZzpdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UHJpdmF0ZS5oOgorICAg
ICAgICAqIEFQSS9KU1NjcmlwdC5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAg
ICAgKCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOndpdGhTb3VyY2U6d2l0aFVSTDppblZpcnR1YWxN
YWNoaW5lOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6XSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhVUkw6aW5WaXJ0dWFsTWFj
aGluZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAgICAoLVtKU1NjcmlwdCB1cmxd
KToKKyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0
IGpzU291cmNlQ29kZTpdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgd3JpdGVDYWNoZTpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgd3JpdGVDYWNoZV0pOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9K
U1NjcmlwdEludGVybmFsLmg6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVz
dEJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkpOgor
ICAgICAgICAoK1tKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0
XSk6CisgICAgICAgICgtW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGNvbnRl
eHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWplY3RI
YW5kbGVyOl0pOgorICAgICAgICAodGVzdExvYWRCYXNpY0ZpbGUpOgorICAgICAgICAodGVzdEpT
U2NyaXB0VVJMKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBjb25m
aWcuaDoKKwogMjAxOS0wMS0zMSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255
LmNvbT4KIAogICAgICAgICBbQ01ha2VdW0pTQ10gQ2hhbmdpbmcgdWRfb3Bjb2RlLnB5IHNob3Vs
ZCB0cmlnZ2VyIGludm9raW5nIHVkX29wY29kZS5weQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCmluZGV4IDVkNWYxMmM3ZWJmMjg5OTQyZTY3ODYwN2Yz
N2JhYjljZTZjM2RkNjguLjQ0ODczNzEwNDlmZjljMzE2ZGFiMzhkMDhlMTcwNzBhYzdjOTNlZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3Qu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKQEAg
LTI3LDYgKzI3LDkgQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xB
U1MgSlNTY3JpcHQ7CitPQkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiAr
NTgsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2Fk
ZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNW
YWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2Fk
ZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAor
ICAgIEpTVmFsdWUgbG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlw
dCwgTlNVUkwgKnVybCk7CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZz
X2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QubW0KaW5kZXggZDVjMjM2NWQwODQ3MTQ4YzgwZjg5OTJiYzA0NDM1
MmYzMWJjYmYwZS4uNTBjNDkyMDcyZDM2NWMxOGJkMTRkZTFjOWQ2ODU0ZTQ2NTlmN2ZhNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCkBAIC0z
NCw4ICszNCwxMCBAQAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgog
I2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNl
LmgiCiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9y
dCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0
ICJKU1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTE2Miw5ICsxNjQsOSBAQCBKU0ludGVybmFsUHJvbWlz
ZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYgogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiTm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVy
cmVkUHJvbWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJy
ZWQpOwotICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVD
YXN0PEpTU3RyaW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0
ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4
ZWNTdGF0ZSogZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmpl
Y3QgYnV0IHRoYXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55
d2F5LgorICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFs
UmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZh
bHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIApA
QCAtMTc1LDcgKzE3NywxNSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6
Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXJncy5h
cHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VDb2RlOm1vZHVs
ZUtleV0pOworICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtzdGF0aWNfY2FzdDxKU1Nj
cmlwdCAqPihzY3JpcHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldOworICAgICAgICBjb25zdCBT
dHJpbmcmIG9sZE1vZHVsZUtleSA9IHNvdXJjZS0+c291cmNlQ29kZSgpLnByb3ZpZGVyKCktPnNv
dXJjZU9yaWdpbigpLnN0cmluZygpOworICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIG9sZE1vZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkgeworICAgICAgICAg
ICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBzYW1l
IEpTU2NyaXB0IHdhcyBwcm92aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycywgcHJl
dmlvdXNseTogIiwgb2xkTW9kdWxlS2V5LCAiIGFuZCBub3c6ICIsIG1vZHVsZUtleS5zdHJpbmco
KSkpKTsKKyAgICAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VE
ZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7
CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBhcmdzLmFwcGVuZChzb3VyY2UpOwogICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVk
UHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxk
IG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgp
OwogICAgIH0pOwpAQCAtMjEwLDYgKzIyMCwyMSBAQCBKU09iamVjdCogSlNBUElHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZQog
ICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVj
dDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwg
KnVybCkKK3sKKyAgICBBU1NFUlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7
CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBbdXJsIGFic29sdXRlU3RyaW5nXSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2Ug
PSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsRXhlYygpLCBbc2NyaXB0IGpzU291cmNlQ29k
ZTprZXldLT5zb3VyY2VDb2RlKCksIGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
dHJ5Q3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICByZXN1bHQtPnJlc29sdmUoZ2xvYmFsRXhlYygpLCBwcm9taXNlKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCA1MThmYjg3MjM5
ODQ4MzQxMmZmYTFmYmRkY2ZkOWZmYWUxNjhhZmYwLi5jNjNjNmM1NTdkODczMzdhOTc2MzdhNGIz
YTgyMTZmOTM4ODhhNDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpA
QCAtMTAzLDE3ICsxMDMsMzcgQEAKICAgICByZXR1cm4gW3NlbGYgZXZhbHVhdGVTY3JpcHQ6c2Ny
aXB0IHdpdGhTb3VyY2VVUkw6bmlsXTsKIH0KIAotLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0
OihOU1N0cmluZyAqKXNjcmlwdCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTAorc3Rh
dGljIEpTVmFsdWUgKmV2YWx1YXRlU2NyaXB0KEpTQ29udGV4dCAqY29udGV4dCwgUmVmUHRyPE9w
YXF1ZUpTU3RyaW5nPiBzb3VyY2UsIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gdXJsKQogewogICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOworICAgIEpTVmFsdWVSZWYgcmVz
dWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LT5tX2NvbnRleHQsIHNvdXJjZS5nZXQoKSwg
bnVsbHB0ciwgdXJsLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworCisgICAgaWYgKGV4Y2Vw
dGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1
ZVJlZjpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU1ZhbHVlICopZXZhbHVh
dGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNl
VVJMCit7CiAgICAgYXV0byBzY3JpcHRKUyA9IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc2Ny
aXB0KTsKICAgICBhdXRvIHNvdXJjZVVSTEpTID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShb
c291cmNlVVJMIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2
YWx1YXRlU2NyaXB0KG1fY29udGV4dCwgc2NyaXB0SlMuZ2V0KCksIG51bGxwdHIsIHNvdXJjZVVS
TEpTLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworICAgIHJldHVybiBldmFsdWF0ZVNjcmlw
dChzZWxmLCBzY3JpcHRKUywgc291cmNlVVJMSlMpOworfQogCi0gICAgaWYgKGV4Y2VwdGlvblZh
bHVlKQotICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvblZhbHVlXTsKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNj
cmlwdCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIGlmIChzY3JpcHQudHlwZSA9
PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSkgeworICAgICAgICBTdHJpbmcgc291cmNlID0gW3Njcmlw
dCBzb3VyY2VdOworICAgICAgICByZXR1cm4gZXZhbHVhdGVTY3JpcHQoc2VsZiwgT3BhcXVlSlNT
dHJpbmc6OnRyeUNyZWF0ZShXVEZNb3ZlKHNvdXJjZSkpLCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3Jl
YXRlKFt1cmwgYWJzb2x1dGVTdHJpbmddKSk7CisgICAgfQorCisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQVBJR2xv
YmFsT2JqZWN0Kj4odm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNl
UmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgbW9kdWxlIGxvYWRpbmciIGluQ29udGV4dDpzZWxm
XSBpbkNvbnRleHQ6c2VsZl07CiAKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1
ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdp
dGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2Ny
aXB0TW9kdWxlKHNjcmlwdCwgdXJsKSkgaW5Db250ZXh0OnNlbGZdOwogfQogCiAtICh2b2lkKXNl
dEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCkBAIC0zMDAsNiArMzIwLDExIEBACiAgICAgcmV0
dXJuIE5POwogfQogCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uV2l0aFN0
cmluZzooU3RyaW5nJilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5
RXhjZXB0aW9uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6c3RyaW5nIGlu
Q29udGV4dDpzZWxmXS5KU1ZhbHVlUmVmXTsKK30KKwogLSAodm9pZCliZWdpbkNhbGxiYWNrV2l0
aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSBjYWxsZWVWYWx1ZTooSlNWYWx1ZVJl
ZiljYWxsZWVWYWx1ZSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVlIGFyZ3VtZW50Q291
bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNWYWx1ZVJlZiAqKWFy
Z3VtZW50cwogewogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGQ0ZTIwNmIz
MzU3NWU5ZmE2ZDQxODJlOWUxYWQ4OTQwNTY4YTg2NzcuLjJlMjFhZGM2ZTYwZTAyM2IyMGNhOGU1
OWJlYjM4Nzk1NmVkNzliMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UHJpdmF0ZS5oCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdh
dGUgdGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90
ZSwgdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5
IFVJV2ViVmlldy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVM
b2FkZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFj
b3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBtZXRob2QKKyBA
YWJzdHJhY3QgUnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNTY3JpcHQgdG8g
ZXZhbHVhdGUuCisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0IHdhcyBjcmVh
dGVkIHdpdGggSlNTY3JpcHRUeXBlUHJvZ3JhbSwgdGhlIHNjcmlwdCB3aWxsIHJ1biBzeW5jaHJv
bm91c2x5IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uLgorCisgT3RoZXJ3aXNl
LCBpZiB0aGUgc2NyaXB0IHdhcyBjcmVhdGVkIHdpdGggSlNTY3JpcHRUeXBlTW9kdWxlLCB0aGUg
bW9kdWxlIHdpbGwgYmUgcnVuIGFzeW5jaHJvbm91c2x5IGFuZCB3aWxsIHJldHVybiBhIHByb21p
c2UgcmVzb2x2ZWQgd2hlbiB0aGUgbW9kdWxlIGFuZCBhbnkgdHJhbnNpdGl2ZSBkZXBlbmRlbmNp
ZXMgYXJlIGxvYWRlZC4gVGhlIG1vZHVsZSBsb2FkZXIgd2lsbCB0cmVhdCB0aGUgc2NyaXB0IGFz
IGlmIGl0IGhhZCBiZWVuIHJldHVybmVkIGZyb20gYSBkZWxlZ2F0ZSBjYWxsIHRvIG1vZHVsZUxv
YWRlckRlbGVnYXRlIHdpdGggaXRzIGlkZW50ZWZpZXIgYXMgdXJsLiBUaGlzIG1pcnJvcnMgdGhl
IEphdmFTY3JpcHQgZHluYW1pYyBpbXBvcnQgb3BlcmF0aW9uLgorICovCistIChKU1ZhbHVlICop
ZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNVUkwg
Kil1cmw7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgK
aW5kZXggNGFhYTg5OThiYmMxODQzNjAzZjhhYjU4OTQ5YTcxNjVjNDk3NjA2Zi4uZTZhNzc5YTVj
MGU3NGU0MGViMzFkYWMzODA0ZGZjNDVhY2M4ZjcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHQuaApAQCAtMzEsNiArMzEsMTggQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAog
QGNsYXNzIEpTVmlydHVhbE1hY2hpbmU7CiAKKy8qIQorIEBlbnVtIEpTU2NyaXB0VHlwZQorIEBh
YnN0cmFjdCAgICAgQSBjb25zdGFudCBpZGVudGlmeWluZyB0aGUgZXhlY3V0aW9uIHR5cGUgb2Yg
YSBKU1NjcmlwdC4KKyBAY29uc3RhbnQgICAgIGtKU1NjcmlwdFR5cGVQcm9ncmFtICBUaGUgdHlw
ZSBvZiBhIG5vcm1hbCBKYXZhU2NyaXB0IHByb2dyYW0uCisgQGNvbnN0YW50ICAgICBrSlNTY3Jp
cHRUeXBlTW9kdWxlICAgVGhlIHR5cGUgb2YgYSBtb2R1bGUgSmF2YVNjcmlwdCBwcm9ncmFtLgor
ICovCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBKU1NjcmlwdFR5cGUpIHsKKyAgICBrSlNT
Y3JpcHRUeXBlUHJvZ3JhbSwKKyAgICBrSlNTY3JpcHRUeXBlTW9kdWxlLAorfTsKKworCiBKU0Nf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiBA
aW50ZXJmYWNlIEpTU2NyaXB0IDogTlNPYmplY3QKIApAQCAtNDEsNyArNTMsNyBAQCBKU0NfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiAgQHBh
cmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBp
bi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgogICovCi0rIChudWxsYWJsZSBpbnN0YW5jZXR5
cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bSBKU0NfQVBJX0RFUFJFQ0FURUQobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpT
Q19JT1NfVEJBKSk7CiAKIC8qIQogIEBtZXRob2QKQEAgLTU1LDEzICs2Nyw0NCBAQCBKU0NfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiAKICBJ
ZiB0aGUgZmlsZSBhdCBmaWxlUGF0aCBpcyBub3QgYXNjaWkgdGhpcyBtZXRob2Qgd2lsbCByZXR1
cm4gbmlsLgogICovCi0rIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmls
ZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICop
dm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRC
eXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKLQorKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFi
bGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNV
UkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSksIGlv
cyhKU0NfSU9TX1RCQSkpOwogCiAvKiEKICBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIGVxdWl2
YWxlbnQgdG8gc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2ln
bmluZzphbmRCeXRlY29kZUNhY2hlOi4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsK
KysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmls
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2ln
bmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToo
bnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0Nf
TUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKyBA
cGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KKyBAcGFyYW0gc291cmNl
IFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2YWx1YXRlZCBieSB0
aGUgSlMgdm0uCisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2Fu
IGJlIGV2YWx1YXRlZCBpbi4KKyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhl
IHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBA
cGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUg
Y3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0Lgor
ICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUp
dHlwZSB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNo
ZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwor
CisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3Bl
Y2lmaWVkIHZpcnR1YWwgbWFjaGluZSB3aXRoIGEgcGF0aCB0byBhIGNvZGVzaWduaW5nIGFuZCBi
eXRlY29kZSBjYWNoaW5nLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291
cmNlLgorIEBwYXJhbSBmaWxlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgSlMg
c291cmNlIGNvZGUgZmlsZSBvbiBkaXNrLgorIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVS
TCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVy
ZSBleGVjdXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3Jp
cHQgY291bGQgbm90IGJlIGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCisgQHJlc3VsdCBU
aGUgbmV3IHNjcmlwdC4KKyBAZGlzY3Vzc2lvbiBUaGUgZmlsZXMgYXQgZmlsZVBhdGggYW5kIGNh
Y2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgZm9yIHRoZSBsaWZlY3lj
bGUgb2Ygdm0uIFRoaXMgbWV0aG9kIHdpbGwgZmlsZSBiYWNrIHRoZSBtZW1vcnkgZm9yIHRoZSBz
b3VyY2UuCisKKyBJZiB0aGUgZmlsZSBhdCBmaWxlUGF0aCBpcyBub3QgYXNjaWkgdGhpcyBtZXRo
b2Qgd2lsbCByZXR1cm4gbmlsLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0
T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VS
TCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRC
eXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJy
b3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CisKKy8qISBAYWJzdHJhY3QgVGhlIHR5
cGUgb2Ygc2NyaXB0IHByb3ZpZGVkIGR1cmluZyBjcmVhdGlvbi4gKi8KK0Bwcm9wZXJ0eSAocmVh
ZG9ubHkpIEpTU2NyaXB0VHlwZSB0eXBlOworCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJy
b3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCiBAZW5kCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmluZGV4IGZlZjQ0NmRlZGY4NmIyNDUw
YWE3ZjgzZjJiYTNlZTcwYTg4NTJmZTAuLmQyY2U5ZDNhZTI4YjRhOTljMjgzMDA1ZjZlYTgwOTdj
YzE3MTQ4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
bW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpAQCAtMzcsMTUg
KzM3LDIxIEBACiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCisj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAK
K3N0YXRpYyBOU1N0cmluZyAqSlNTY3JpcHRFcnJvckRvbWFpbiA9IEAiSlNTY3JpcHRFcnJvckRv
bWFpbiI7CitzdGF0aWMgTlNTdHJpbmcgKm1lc3NhZ2VOU1N0cmluZyA9IEAibWVzc2FnZSI7CisK
IEBpbXBsZW1lbnRhdGlvbiBKU1NjcmlwdCB7CiAgICAgX193ZWFrIEpTVmlydHVhbE1hY2hpbmUq
IG1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNTY3JpcHRUeXBlIG1fdHlwZTsKKyAgICBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSBtX21hcHBlZFNvdXJjZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7
Ci0gICAgTlNVUkwqIG1fY2FjaGVQYXRoOworICAgIE5TVVJMICptX2NhY2hlUGF0aDsKICAgICBK
U0M6OkNhY2hlZEJ5dGVjb2RlIG1fY2FjaGVkQnl0ZWNvZGU7CiAgICAgSlNDOjpTdHJvbmc8SlND
OjpKU1NvdXJjZUNvZGU+IG1fanNTb3VyY2VDb2RlOwotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBt
X21vZHVsZUtleTsKIH0KIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3Ry
aW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bQpAQCAt
MTE2LDYgKzEyMiw1MSBAQCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxMQ2hhcj4mCiAgICAgcmV0dXJuIFtKU1Nj
cmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0
aENvZGVTaWduaW5nOmNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07
CiB9CiAKK3N0YXRpYyBKU1NjcmlwdCAqY3JlYXRlRXJyb3IoTlNTdHJpbmcgKm1lc3NhZ2UsIE5T
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IpCisgICAgICAgICplcnJvciA9IFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpKU1NjcmlwdEVycm9yRG9tYWluIGNvZGU6MSB1c2VySW5mbzpA
eyBtZXNzYWdlTlNTdHJpbmc6IG1lc3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAo
aW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZToo
TlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZt
IGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihOU0Vycm9yICoqKWVy
cm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0g
W1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmly
dHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0
LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRo
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6
KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmls
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2Rl
Q2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihOU0Vycm9yICoqKWVycm9yCit7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29s
dXRlVVJMXSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGgg
JUAgaXMgbm90IGEgbG9jYWwgZmlsZSIsIGZpbGVQYXRoVVJMLm9wZXJhdG9yIE5TU3RyaW5nICoo
KV0sIGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBzeXN0
ZW1QYXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFwcGVkLiIsIHN5c3RlbVBhdGgu
b3BlcmF0b3IgTlNTdHJpbmcgKigpXSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0ZXJzQXJl
QWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSks
IGZpbGVEYXRhLnNpemUoKSkpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiTm90IGFsbCBjaGFyYWN0ZXJzIGluIGZpbGUgYXQgJUAgYXJl
IEFTQ0lJLiIsIHN5c3RlbVBhdGgub3BlcmF0b3IgTlNTdHJpbmcgKigpXSwgZXJyb3IpOworICAg
IH0KKworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3Vs
dC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0lt
cGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihm
aWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVk
U291cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNh
Y2hlUGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpICYm
ICFtX2NhY2hlZEJ5dGVjb2RlLm93bmVkKCkpCkBAIC0xNTIsMjIgKzIwMywxNCBAQCBzdGF0aWMg
Ym9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IFZlY3RvcjxMQ2hhcj4mCiAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNv
ZGUgeyBidWZmZXIsIHNpemUgfTsKIH0KIAotLSAodm9pZCl3cml0ZUNhY2hlCistIChCT09MKWNh
Y2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAgICBpZiAobV9jYWNo
ZWRCeXRlY29kZS5zaXplKCkgfHwgIW1fY2FjaGVQYXRoKQotICAgICAgICByZXR1cm47CisgICAg
U3RyaW5nIGVycm9yU3RyaW5nIHsgfTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5n
XTsKKyAgICBpZiAoIWVycm9yU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gISFjcmVh
dGVFcnJvcihlcnJvclN0cmluZywgZXJyb3IpOwogCi0gICAgSlNDOjpQYXJzZXJFcnJvciBlcnJv
cjsKLSAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1f
dmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCksIGVycm9yKTsK
LSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IGZkID0g
b3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2
Nik7Ci0gICAgaWYgKGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHJjID0gZmxv
Y2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICB3cml0ZShm
ZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKLSAg
ICBjbG9zZShmZCk7CisgICAgcmV0dXJuIFlFUzsKIH0KIAogQGVuZApAQCAtMTkxLDEwICsyMzQs
OCBAQCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIFZlY3RvcjxMQ2hhcj4mCiAKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1Nv
dXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CiB7Ci0gICAgaWYgKG1f
anNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VSVChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9k
dWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNvZGUpCiAgICAgICAgIHJldHVybiBtX2pzU291
cmNlQ29kZS5nZXQoKTsKLSAgICB9CiAKICAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hp
bmUudm07CiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24geyB9OwpAQCAtMjAyLDEwICsy
NDMsNDAgQEAgc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8TENoYXI+JgogICAgIEpTQzo6U291cmNlQ29kZSBzb3Vy
Y2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVC
YXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwogICAgIEpT
Qzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRl
KHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291cmNlQ29kZS5zZXQodm0sIGpz
U291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAgICAgcmV0dXJuIGpzU291cmNl
Q29kZTsKIH0KIAorLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCit7CisKKyAgICBp
ZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBp
ZiAoIW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVycm9yID0gIm5vIGNhY2hlIHBhdGggcHJvdmlk
ZWQiOworICAgICAgICByZXR1cm4gTk87CisgICAgXFxkaAorCisgICAgSlNDOjpQYXJzZXJFcnJv
ciBwYXJzZXJFcnJvcjsKKyAgICBhdXRvIGtleSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZygmbV92aXJ0dWFsTWFjaGluZS52bSwgIkFQSSBQbGFjZWhvbGRlciBzdHJpbmciX3MpOworICAg
IG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFs
TWFjaGluZS52bSwgW3NlbGYganNTb3VyY2VDb2RlOmtleV0tPnNvdXJjZUNvZGUoKSwgcGFyc2Vy
RXJyb3IpOworICAgIGlmIChwYXJzZXJFcnJvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZXJyb3Ig
PSAidW5hYmxlIHRvIGdlbmVyYXRlIGNvbXBsZXRlIGJ5dGVjb2RlIjsKKyAgICAgICAgcmV0dXJu
IE5POworICAgIH0KKyAgICBpbnQgZmQgPSBvcGVuKG1fY2FjaGVQYXRoLnBhdGguVVRGOFN0cmlu
ZywgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAg
ICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBtX2NhY2hlUGF0
aC5wYXRoLlVURjhTdHJpbmcsICIgZHVlIHRvIGVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCByZXR1cm5Db2RlID0gZmxvY2soZmQs
IExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICAgICAgZXJyb3Ig
PSAiVW5hYmxlIHRvIGxvY2sgdGhlIGNhY2hlIGZpbGU7IGl0IG1heSBhbHJlYWR5IGJlIGluIHVz
ZS4iOworICAgIGVsc2UKKyAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgp
LCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAh
cmV0dXJuQ29kZTsKK30KIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHRJbnRlcm5hbC5oCmluZGV4IDY2YTc1ZTI2ZTUyYTc2YmQyZDA4ODk4MWZjYTBiOGMxYzk0
NTU0MDIuLjM3Zjc1MTc0MjlmZWIzYWJjMTBhZTA5Yjg2MTJkYTI3ZjcwNjczNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCkBAIC00OCw2ICs0OCw3
IEBAIGNsYXNzIFN0cmluZzsKIC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7CiAtIChjb25z
dCBKU0M6OkNhY2hlZEJ5dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKIC0gKEpTQzo6SlNTb3VyY2VD
b2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5OworLSAo
Qk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlLmgKaW5kZXggYWEzYWU1MWMwOTZhZGQ2NjU0ZTRiYzI0YzFkOGZjMTViYjhi
Yjc3Yy4uY2RhZDk3ZGEyNTNiMGQ2M2U5NDA2NGZkYjk2NzQzNzdjMTE2YjZjOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZhbHVlLmgKQEAgLTEsNCArMSw0IEBACi0vKgorTy8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
SW5jbHVkZXMubSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVz
Lm0KaW5kZXggNjFmMDVkYWIxMjcyZjNmN2FjN2I3YmU3MmRkNDdhMjBkOTdjODNiZS4uMDZkM2Y4
YzY4YjQ2ODk2OGExZDk5OTBkZmY1ZDQwMGZlMzdkYmJjYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRlcy5tCkBAIC0yNyw2ICsyNyw3IEBACiAvLyBT
aW5jZSB3ZSBpbmNsdWRlIGZpbGVzIHRoYXQgaGF2ZW4ndCBwYXNzZWQgdGhyb3VnaCB0aGUgcmV3
cml0ZXIgd2UgbmVlZCB0byBoYW5kbGUgdGhlIG5vbi1yZXdyaXR0ZW4gdmFsdWVzLi4uCiAjZGVm
aW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSgu
Li4pCisjZGVmaW5lIEpTQ19BUElfREVQUkVDQVRFRCguLi4pCiAjZGVmaW5lIEpTQ19NQUNfVkVS
U0lPTl9UQkEgMAogI2RlZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJBIDAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwppbmRleCAwMWY5NGNkM2JiZTBiYzhhNDAxMzUz
MGEzOWE0YzUwNTMzZTlmY2JhLi4yOGQwMjg3YWQ5NTM1Mjg0Y2NmYWNkNjg4NGFmOWQwNGZiOGQ4
ZTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
YworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwpAQCAtNjcs
NyArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciop
OwogI2VuZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAt
MTM4MCwxMSArMTM4MCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAg
IFNldEVycm9yTW9kZSgwKTsKICNlbmRpZgogCisgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJn
YyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHRl
c3RPYmplY3RpdmVDQVBJKCk7CisgICAgdGVzdE9iamVjdGl2ZUNBUEkoZmlsdGVyKTsKICNlbmRp
ZgogCi0gICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmlsdGVyKSk7CiAgICAgaWYgKGZp
bHRlcikKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0KaW5kZXggODM0OTEzMTYxYmNlNTdkYWYyM2NkODgyNzQ3ZGM0OWFkMzI2MWMy
YS4uMDQ3MGZiZTdmNDViNDMzNGNjMDc0MDY4ZWY4Y2VlOGNkZGExYjYwZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtNDEsMTIgKzQxLDE0IEBACiAj
aW1wb3J0ICJSZWdyZXNzMTQxMjc1LmgiCiAjaW1wb3J0ICJSZWdyZXNzMTQxODA5LmgiCiAKKyNp
bXBvcnQgPGxpYnByb2MuaD4KICNpbXBvcnQgPHB0aHJlYWQuaD4KICNpbXBvcnQgPHZlY3Rvcj4K
ICNpbXBvcnQgPHd0Zi9NZW1vcnlGb290cHJpbnQuaD4KICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5o
PgogI2ltcG9ydCA8d3RmL0RhdGFMb2cuaD4KIAorCiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJv
bm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiBleHRlcm4gIkMi
IHZvaWQgSlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7
CiAKQEAgLTU0LDcgKzU2LDcgQEAgZXh0ZXJuICJDIiBib29sIF9CbG9ja19oYXNfc2lnbmF0dXJl
KGlkKTsKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQpOwogCiBl
eHRlcm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lk
KTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7CiBleHRl
cm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKiwgYm9vbCk7CiAKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRApAQCAtMTk4NSw5ICsxOTg3LDkgQEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVj
b2RlQ2FjaGUoKQogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBOU1VSTCogdGVtcERp
cmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBp
c0RpcmVjdG9yeTpZRVNdOwogCi0gICAgICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9y
dCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZm9vID0gbjsiOwotICAgICAg
ICBOU1N0cmluZyogYmFyU291cmNlID0gQCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNc
IjsgZXhwb3J0IGxldCBuID0gbnVsbDsiOwotICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0g
QCJpbXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlz
LnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vOyI7CisgICAgICAgIE5TU3RyaW5nKiBm
b29Tb3VyY2UgPSBAImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0
IG4gPSBudWxsOyI7CisgICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCB7IG4g
fSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAg
ICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0
b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9v
KCk7IjsKIAogICAgICAgICBOU1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcyJdOwogICAgICAgICBOU1VSTCogYmFyUGF0aCA9
IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwpA
QCAtMjAwMiwxOCArMjAwNCwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAg
ICAgICAgIFtiYXpTb3VyY2Ugd3JpdGVUb1VSTDpiYXpQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rp
bmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAKICAgICAgICAgYXV0byBibG9j
ayA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpy
ZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKLSAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBp
c0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKLSAgICAgICAgICAg
ICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVND
SUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdp
dGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGhdXV07Ci0gICAg
ICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zv
by5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pT
U2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmFyUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRl
eHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJh
ckNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxU
b09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pCi0gICAgICAgICAgICAg
ICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJ
RmlsZTpiYXpQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRo
Q29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmF6Q2FjaGVQYXRoXV1dOwotICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0g
dHJ1ZTsKKyAgICAgICAgICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBuaWw7CisgICAgICAgICAgICBp
ZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpz
Il0pIHsKKyAgICAgICAgICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNvdXJjZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZlVSTDpiYXJQ
YXRoIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjomZXJyb3JdOworICAgICAg
ICAgICAgICAgIGNoZWNrUmVzdWx0KEAib3BlbmluZyB0aGUgZmlsZSBzb3VyY2UgZmlsZSBzaG91
bGQgc3VjY2VlZCIsIHNvdXJjZSAmJiAhZXJyb3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSB3aXRoU291cmNlOnNv
dXJjZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgYW5kQnl0ZWNvZGVD
YWNoZTpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoW2lk
ZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkgeworICAgICAgICAg
ICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICAgICAgICAgIGF1dG8gc291cmNl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mVVJMOmZvb1BhdGggZW5jb2Rpbmc6TlNB
U0NJSVN0cmluZ0VuY29kaW5nIGVycm9yOiZlcnJvcl07CisgICAgICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJvcGVuaW5nIHRoZSBmaWxlIHNvdXJjZSBmaWxlIHNob3VsZCBzdWNjZWVkIiwgc291
cmNlICYmICFlcnJvcik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gW0pTU2NyaXB0IHNjcmlw
dE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIHdpdGhTb3VyY2U6c291cmNlIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0
aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgfSBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFs
VG9PYmplY3Q6QCJmaWxlOi8vL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdKSB7CisgICAgICAgICAg
ICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgICAgICAgICAgICAgYXV0byBzb3VyY2Ug
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZVUkw6YmF6UGF0aCBlbmNvZGluZzpOU0FT
Q0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6JmVycm9yXTsKKyAgICAgICAgICAgICAgICBjaGVja1Jl
c3VsdChAIm9wZW5pbmcgdGhlIGZpbGUgc291cmNlIGZpbGUgc2hvdWxkIHN1Y2NlZWQiLCBzb3Vy
Y2UgJiYgIWVycm9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbSlNTY3JpcHQgc2NyaXB0
T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgd2l0aFNvdXJjZTpzb3VyY2UgaW5WaXJ0dWFsTWFj
aGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFuZEJ5dGVjb2RlQ2FjaGU6YmF6Q2FjaGVQYXRo
IGVycm9yOm5pbF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
CiAgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZh
bHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4
dF1dXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICAgICAgQk9PTCBzdWNjZXNzID0gW3Jl
c3VsdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOiZlcnJvcl07CisgICAgICAgICAgICBjaGVja1Jl
c3VsdChAIkJ5dGVjb2RlIHdhcyBjYWNoZWQgY29ycmVjdGx5Iiwgc3VjY2VzcyAmJiAhZXJyb3Ip
OworICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtyZXN1bHRdXTsKICAg
ICAgICAgfTsKIAogICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgICAgIEpTQzo6
T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IHRydWU7CiAgICAgICAgICAgICBhdXRvICpjb250
ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOmJs
b2NrXTsKICAgICAgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0
OwogICAgICAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6W05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOwpAQCAt
MjAyMywxMiArMjA0NCwxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAgICAg
ICAgIH0KIAogICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpmb29QYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6YmFyUGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgQk9PTCBy
ZW1vdmVkQWxsID0gdHJ1ZTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAg
cmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6
bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJM
OmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJl
bW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJy
b3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNy
ZWF0ZWQiLCByZW1vdmVkQWxsKTsKICAgICB9CiB9CiAKQEAgLTIwNzgsNyArMjEwMSw3IEBAIHN0
YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQogCiBAZW5kCiAKLXN0YXRpYyB2b2lk
IHRlc3RMb2FkQmFzaWNGaWxlKCkKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5
U1BJKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgYXV0byAqY29udGV4dCA9
IFtKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CkBAIC0yMDg5LDM0ICsy
MTEyLDExOCBAQCBzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCiAgICAgfQogfQogCi12
b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKKworQGludGVyZmFjZSBKU0NvbnRleHRNZW1vcnlNYXBw
ZWRMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKwor
KyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpT
Q29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIHsKK30KKworKyAoaW5zdGFuY2V0eXBl
KW5ld0NvbnRleHQKK3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dE1lbW9yeU1hcHBl
ZExvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCist
ICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlm
aWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKily
ZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBOU1VSTCAq
ZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmluZ11dOwor
ICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1v
ZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
Y29udGV4dC52aXJ0dWFsTWFjaGluZSBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOwor
ICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2Ny
aXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pT
VmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJsZSB0byBjcmVhdGUgU2Ny
aXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0ZXN0
TG9hZEJhc2ljRmlsZSgpCit7CisgICAgc2l6ZV90IGNvdW50ID0gcHJvY19waWRpbmZvKGdldHBp
ZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVn
YXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0g
Y29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9T
Y3JpcHRzKCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVs
bEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgc2l6ZV90IGFmdGVyQ291bnQgPSBwcm9jX3Bp
ZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiSlNTY3JpcHQgc2hvdWxkIG5vdCBob2xkIGEgZmlsZSBkZXNjcmlwdG9yIiwgY291
bnQgPT0gYWZ0ZXJDb3VudCk7CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBw
cm9taXNlLCBudWxsKTsKKyAgICB9CisgICAgc2l6ZV90IGFmdGVyID0gcHJvY19waWRpbmZvKGdl
dHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgIGNoZWNrUmVzdWx0KEAiRmls
ZSBkZXNjcmlwdG9yIGNvdW50IHNob2x1ZG4ndCBjaGFuZ2UgYWZ0ZXIgY29udGV4dCBpcyBkZWFs
bG9jZWQiLCBjb3VudCA9PSBhZnRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVS
TCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBb
SlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAg
IGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAq
dXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Jhc2ljLmpzIiByZWxhdGl2ZVRvVVJMOnJl
c29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2Ny
aXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBlZEZyb21BU0NJ
SUZpbGU6dXJsIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBhbmRCeXRl
Y29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworCisgICAgICAgIEpTVmFsdWUgKnJlc3VsdDEgPSBb
Y29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdCB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6QCIvZm9vL2Jhci5qcyJdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtK
U1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9k
dWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBKU1ZhbHVlICpy
ZXN1bHQyID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVSTDpb
TlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Zvby9iYXouanMiXV07CisKKyAgICAgICAgX19ibG9j
ayBib29sIHdhc1JlamVjdGVkID0gZmFsc2U7CisgICAgICAgIFtyZXN1bHQyIGludm9rZU1ldGhv
ZDpAImNhdGNoIiB3aXRoQXJndW1lbnRzOkBbXihKU1ZhbHVlICpyZWFzb24pIHsKKyAgICAgICAg
ICAgIHdhc1JlamVjdGVkID0gW3JlYXNvbiBpc09iamVjdF07CisgICAgICAgIH1dXTsKKworICAg
ICAgICBjaGVja1Jlc3VsdChAIk1vZHVsZSBKU1NjcmlwdCBpbXBvcnRlZCB3aXRoIGRpZmZlcmVu
dCBpZGVudGlmaWVycyBpcyByZWplY3RlZCIsIHdhc1JlamVjdGVkKTsKKyAgICB9Cit9CisKKyNk
ZWZpbmUgUlVOKHRlc3QpIGRvIHsgXAorICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpIFwK
KyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIE5TTG9nKEAiJXMuLi5cbiIsICN0ZXN0KTsg
XAorICAgICAgICB0ZXN0OyBcCisgICAgICAgIE5TTG9nKEAiJXM6IGRvbmUuXG4iLCAjdGVzdCk7
IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBj
aGFyKiBmaWx0ZXIpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOwog
Ci0gICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKLSAgICBydW5KSVRUaHJlYWRMaW1pdFRl
c3RzKCk7CisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3QpIC0+IGJv
b2wgeworICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgcmV0dXJuIHN0cmNhc2VzdHIo
dGVzdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIFJVTihj
aGVja05lZ2F0aXZlTlNJbnRlZ2VycygpKTsKKyAgICBSVU4ocnVuSklUVGhyZWFkTGltaXRUZXN0
cygpKTsKKworICAgIFJVTih0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpKTsK
KyAgICBSVU4odGVzdEZldGNoKCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKSk7
CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkpOworICAgIFJVTih0ZXN0SW1wb3J0
TW9kdWxlVHdpY2UoKSk7CisgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlKCkpOwogCi0gICAgdGVz
dExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAg
ICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgp
OwotICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7
CisgICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0
TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxT
Y3JpcHRVUkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVO
KHRlc3RKU1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2Fk
QmFzaWNGaWxlKCk7Ci0KLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29s
dmVFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdl
cik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7Ci0g
ICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKTsKLSAgICBwcm9t
aXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VDcmVhdGVSZXNvbHZlZCgpOwot
ICAgIHByb21pc2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFsbGVsUHJvbWlzZVJlc29sdmVU
ZXN0KCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJVTih0
ZXN0TG9hZEJhc2ljRmlsZSgpKTsKKworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0
aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCkp
OworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7CisgICAgUlVOKHByb21pc2VDcmVh
dGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKSk7CiAK
ICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9jb25maWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAppbmRl
eCBlMzY0MzkwZmRkMGY3ZDQ1NzdkY2UxZTQ2ODgzYjdlMTI3ZWE1YzBjLi5mYTFiOGE5N2ZkOWU0
N2FkNGJjMjUwYjA1NjlkYWE4ZjBiNzk3NTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvY29uZmlnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQogI2RlZmluZSBK
U0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikgSlNfRVhQT1JUCisjZGVmaW5lIEpTQ19BUElfREVQUkVD
QVRFRCguLi4pCiAvLyBVc2UgemVybyBzaW5jZSBpdCB3aWxsIGJlIGxlc3MgdGhhbiBhbnkgcG9z
c2libGUgdmVyc2lvbiBudW1iZXIuCiAjZGVmaW5lIEpTQ19NQUNfVkVSU0lPTl9UQkEgMAogI2Rl
ZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJBIDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCAwNWU4ZjA3ODYzMjA1MjJkNjgyZTdkZTk1NjllMzBh
MGEyZmJhYjcyLi41MzUzYTRhZjJlNzU5ZjhlMjc1M2M4MDYzMmMzZmFjMjJmYWRjODdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0yMTMs
OSArMjEzLDEwIEBAIGNsYXNzIERlY29kZXIgewogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FU
SU9OOwogCiBwdWJsaWM6Ci0gICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRy
ZXNzLCBzaXplX3Qgc2l6ZSkKKyAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFk
ZHJlc3MsIHNpemVfdCBzaXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSkKICAgICAgICAgOiBt
X3ZtKHZtKQogICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oYmFzZUFkZHJlc3MpKQorICAgICAgICAsIG1fc291cmNlVVJMT3ZlcnJpZGUoV1RG
TW92ZShzb3VyY2VVUkxPdmVycmlkZSkpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fc2l6
ZShzaXplKQogI2VuZGlmCkBAIC0yNTcsOSArMjU4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9m
aW5hbGl6ZXJzLmFkZChvZmZzZXQsIGZuKTsKICAgICB9CiAKKyAgICBjb25zdCBVUkwmIHNvdXJj
ZVVSTE92ZXJyaWRlKCkgeyByZXR1cm4gbV9zb3VyY2VVUkxPdmVycmlkZTsgfQorCiBwcml2YXRl
OgogICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisgICAg
VVJMIG1fc291cmNlVVJMT3ZlcnJpZGU7CiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX3Np
emU7CiAjZW5kaWYKQEAgLTEyNTgsMTAgKzEyNjIsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgU3RyaW5nIGRlY29kZWRTb3VyY2UgPSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CiAgICAg
ICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVj
b2RlKGRlY29kZXIpOwotICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkxTdHJpbmcgPSBtX3VybC5kZWNvZGUo
ZGVjb2Rlcik7CisgICAgICAgIFVSTCBzb3VyY2VVUkw7CisgICAgICAgIGlmIChkZWNvZGVyLnNv
dXJjZVVSTE92ZXJyaWRlKCkpIHsKKyAgICAgICAgICAgIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBT
b3VyY2VPcmlnaW4geyBkZWNvZGVyLnNvdXJjZVVSTE92ZXJyaWRlKCkgfTsKKyAgICAgICAgICAg
IHNvdXJjZVVSTCA9IGRlY29kZXIuc291cmNlVVJMT3ZlcnJpZGUoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzb3VyY2VVUkwgPSBVUkwoVVJMKCksIGRlY29kZWRVUkxTdHJpbmcpOwog
ICAgICAgICBUZXh0UG9zaXRpb24gZGVjb2RlZFN0YXJ0UG9zaXRpb24gPSBtX3N0YXJ0UG9zaXRp
b24uZGVjb2RlKGRlY29kZXIpOwogCi0gICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3Vy
Y2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRT
dGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAgICAgUmVmPFN0cmluZ1NvdXJjZVByb3Zp
ZGVyPiBzb3VyY2VQcm92aWRlciA9IFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoZGVjb2Rl
ZFNvdXJjZSwgZGVjb2RlZFNvdXJjZU9yaWdpbiwgV1RGTW92ZShzb3VyY2VVUkwpLCBkZWNvZGVk
U3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSk7CiAgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVy
LCBzb3VyY2VQcm92aWRlci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIu
bGVha1JlZigpOwogICAgIH0KQEAgLTIwMDAsMTAgKzIwMTAsMTAgQEAgc3RkOjpwYWlyPE1hbGxv
Y1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlS2UKICAgICByZXR1cm4gZW5jb2Rlci5yZWxlYXNlKCk7CiB9CiAKLVVubGlua2VkQ29k
ZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYg
a2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorVW5saW5rZWRDb2RlQmxvY2sq
IGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUsIFVSTCYmIHNvdXJjZVVSTE92ZXJyaWRlKQog
ewogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
ZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVyKHZtLCBidWZm
ZXIsIHNpemUpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplLCBXVEZNb3Zl
KHNvdXJjZVVSTE92ZXJyaWRlKSk7CiAgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlu
a2VkQ29kZUJsb2NrKj4gZW50cnk7CiAgICAgewogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAppbmRl
eCBiY2I4YWNiNmNlNTcwZTk3MjYzODljMjZkNzBiY2JhMjFkYThkNGFkLi4yYmVmYWY5MTAyOTZj
MzE2MDFlYWU2NmY0ZjlkNDgxMDdhNTM4ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkpTQ2Fz
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNCwxMyArMzUsMTMgQEAgY2xhc3MgU291cmNlQ29kZUtl
eTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogCiBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4
X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBj
b25zdCBVbmxpbmtlZENvZGVCbG9jayopOwotVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVC
bG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCk7
CitVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNvdXJj
ZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBVUkwmJik7CiAKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgotVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNv
ZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQq
IGJ1ZmZlciwgc2l6ZV90IHNpemUpCitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVC
bG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3Qgc2l6ZSwgVVJMJiYgc291cmNlVVJMT3ZlcnJpZGUgPSBVUkwoKSkKIHsKLSAgICBy
ZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGRlY29kZUNvZGVCbG9ja0ltcGwo
dm0sIGtleSwgYnVmZmVyLCBzaXplKSk7CisgICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVC
bG9ja1R5cGUqPihkZWNvZGVDb2RlQmxvY2tJbXBsKHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSwgV1RG
TW92ZShzb3VyY2VVUkxPdmVycmlkZSkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362351</attachid>
            <date>2019-02-18 15:55:28 -0800</date>
            <delta_ts>2019-02-18 20:01:00 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>32408</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCk7
CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBA
QAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0
ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNTY3JpcHRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50
ZXJuYWwuaCIKQEAgLTE2Miw5ICsxNjQsOSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9i
YWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKIAogICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2Jh
bE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2
ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKICAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwogCkBAIC0xNzUsNyArMTc3LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3Jp
cHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3Vy
Y2UgPSBbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxl
S2V5XTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBvbGRNb2R1bGVLZXkgPSBzb3VyY2UtPnNvdXJj
ZUNvZGUoKS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKS5zdHJpbmcoKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1bGVLZXkpICE9IG1v
ZHVsZUtleSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZm
ZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93
OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVy
cmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91
bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVm
aW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAg
ICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZl
KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyMjAsMjEgQEAgSlNP
YmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJv
cGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRl
SlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCkKK3sKKyAgICBBU1NF
UlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBbdXJsIGFic29sdXRlU3Ry
aW5nXSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVN
b2R1bGUoZ2xvYmFsRXhlYygpLCBbc2NyaXB0IGpzU291cmNlQ29kZTprZXldLT5zb3VyY2VDb2Rl
KCksIGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBy
ZXN1bHQtPnJlc29sdmUoZ2xvYmFsRXhlYygpLCBwcm9taXNlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
MTcgKzEwMywzNyBAQCAtIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopCiAg
ICAgcmV0dXJuIFtzZWxmIGV2YWx1YXRlU2NyaXB0OnNjcmlwdCB3aXRoU291cmNlVVJMOm5pbF07
CiB9CiAKLS0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQgd2l0
aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3N0YXRpYyBKU1ZhbHVlICpldmFsdWF0ZVNj
cmlwdChKU0NvbnRleHQgKmNvbnRleHQsIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc291cmNlLCBS
ZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHVybCkKIHsKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZh
bHVlID0gbnVsbHB0cjsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQo
Y29udGV4dC0+bV9jb250ZXh0LCBzb3VyY2UuZ2V0KCksIG51bGxwdHIsIHVybC5nZXQoKSwgMCwg
JmV4Y2VwdGlvblZhbHVlKTsKKworICAgIGlmIChleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgcmV0
dXJuIFtjb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07Cisg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpj
b250ZXh0XTsKK30KKworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKXNj
cmlwdCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTAorewogICAgIGF1dG8gc2NyaXB0
SlMgPSBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHNjcmlwdCk7CiAgICAgYXV0byBzb3VyY2VV
UkxKUyA9IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmlu
Z10pOwotICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQs
IHNjcmlwdEpTLmdldCgpLCBudWxscHRyLCBzb3VyY2VVUkxKUy5nZXQoKSwgMCwgJmV4Y2VwdGlv
blZhbHVlKTsKKyAgICByZXR1cm4gZXZhbHVhdGVTY3JpcHQoc2VsZiwgc2NyaXB0SlMsIHNvdXJj
ZVVSTEpTKTsKK30KIAotICAgIGlmIChleGNlcHRpb25WYWx1ZSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CistIChKU1ZhbHVl
ICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNV
UkwgKil1cmwKK3sKKyAgICBpZiAoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dyYW0p
IHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9IFtzY3JpcHQgc291cmNlXTsKKyAgICAgICAgcmV0
dXJuIGV2YWx1YXRlU2NyaXB0KHNlbGYsIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoV1RGTW92
ZShzb3VyY2UpKSwgT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShbdXJsIGFic29sdXRlU3RyaW5n
XSkpOworICAgIH0KKworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQp
OworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9iamVjdCo+KHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVjdGVkV2l0aFJlYXNvbjpbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiQ29udGV4dCBkb2VzIG5vdCBzdXBw
b3J0IG1vZHVsZSBsb2FkaW5nIiBpbkNvbnRleHQ6c2VsZl0gaW5Db250ZXh0OnNlbGZdOwogCi0g
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpz
ZWxmXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZih2bSwg
Z2xvYmFsT2JqZWN0LT5sb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShzY3JpcHQsIHVybCkp
IGluQ29udGV4dDpzZWxmXTsKIH0KIAogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2
YWx1ZQpAQCAtMzAwLDYgKzMyMCwxMSBAQCAtIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9u
OihKU1ZhbHVlCiAgICAgcmV0dXJuIE5POwogfQogCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uV2l0aFN0cmluZzooU3RyaW5nJilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3Nl
bGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJv
bU1lc3NhZ2U6c3RyaW5nIGluQ29udGV4dDpzZWxmXS5KU1ZhbHVlUmVmXTsKK30KKwogLSAodm9p
ZCliZWdpbkNhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSBjYWxs
ZWVWYWx1ZTooSlNWYWx1ZVJlZiljYWxsZWVWYWx1ZSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhp
c1ZhbHVlIGFyZ3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29u
c3QgSlNWYWx1ZVJlZiAqKWFyZ3VtZW50cwogewogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFk
OjpjdXJyZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBACiAv
KiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWlu
ZyB0byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBm
b3IgY29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0
ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEp
KTsKIAorLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBAcGFyYW0g
c2NyaXB0IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0aGUgcHJv
dmlkZWQgSlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFtLCB0aGUg
c2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGV2
YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBK
U1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkg
YW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFu
eSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3
aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRl
bGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUgd2l0aCBpdHMgaWRlbnRlZmllciBh
cyB1cmwuIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRp
b24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlw
dCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXVybDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsMTggQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAogQGNsYXNzIEpTVmlydHVhbE1hY2hp
bmU7CiAKKy8qIQorIEBlbnVtIEpTU2NyaXB0VHlwZQorIEBhYnN0cmFjdCAgICAgQSBjb25zdGFu
dCBpZGVudGlmeWluZyB0aGUgZXhlY3V0aW9uIHR5cGUgb2YgYSBKU1NjcmlwdC4KKyBAY29uc3Rh
bnQgICAgIGtKU1NjcmlwdFR5cGVQcm9ncmFtICBUaGUgdHlwZSBvZiBhIG5vcm1hbCBKYXZhU2Ny
aXB0IHByb2dyYW0uCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlTW9kdWxlICAgVGhlIHR5
cGUgb2YgYSBtb2R1bGUgSmF2YVNjcmlwdCBwcm9ncmFtLgorICovCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBKU1NjcmlwdFR5cGUpIHsKKyAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSwKKyAg
ICBrSlNTY3JpcHRUeXBlTW9kdWxlLAorfTsKKworCiBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
eChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIEpTU2NyaXB0IDog
TlNPYmplY3QKIApAQCAtNDEsNyArNTMsNyBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChK
U0NfTUFDX1RCQSksCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQg
Y2FuIGJlIGV2YWx1YXRlZCBpbi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgogICovCi0rIChu
dWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2Ug
aW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtOworKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1h
Y2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBKU0NfQVBJX0RFUFJFQ0FURUQobWFjb3N4KEpT
Q19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKIC8qIQogIEBtZXRob2QKQEAgLTU1LDEz
ICs2Nyw0NCBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksCiAKICBJ
ZiB0aGUgZmlsZSBhdCBmaWxlUGF0aCBpcyBub3QgYXNjaWkgdGhpcyBtZXRob2Qgd2lsbCByZXR1
cm4gbmlsLgogICovCi0rIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmls
ZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICop
dm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRC
eXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKLQorKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFi
bGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNV
UkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSksIGlv
cyhKU0NfSU9TX1RCQSkpOwogCiAvKiEKICBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIGVxdWl2
YWxlbnQgdG8gc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2ln
bmluZzphbmRCeXRlY29kZUNhY2hlOi4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsK
KysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmls
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2ln
bmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToo
bnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0Nf
TUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKyBA
cGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KKyBAcGFyYW0gc291cmNl
IFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2YWx1YXRlZCBieSB0
aGUgSlMgdm0uCisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2Fu
IGJlIGV2YWx1YXRlZCBpbi4KKyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhl
IHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBA
cGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUg
Y3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0Lgor
ICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUp
dHlwZSB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNo
ZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwor
CisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3Bl
Y2lmaWVkIHZpcnR1YWwgbWFjaGluZSB3aXRoIGEgcGF0aCB0byBhIGNvZGVzaWduaW5nIGFuZCBi
eXRlY29kZSBjYWNoaW5nLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291
cmNlLgorIEBwYXJhbSBmaWxlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgSlMg
c291cmNlIGNvZGUgZmlsZSBvbiBkaXNrLgorIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVS
TCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVy
ZSBleGVjdXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3Jp
cHQgY291bGQgbm90IGJlIGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCisgQHJlc3VsdCBU
aGUgbmV3IHNjcmlwdC4KKyBAZGlzY3Vzc2lvbiBUaGUgZmlsZXMgYXQgZmlsZVBhdGggYW5kIGNh
Y2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgZm9yIHRoZSBsaWZlY3lj
bGUgb2Ygdm0uIFRoaXMgbWV0aG9kIHdpbGwgZmlsZSBiYWNrIHRoZSBtZW1vcnkgZm9yIHRoZSBz
b3VyY2UuCisKKyBJZiB0aGUgZmlsZSBhdCBmaWxlUGF0aCBpcyBub3QgYXNjaWkgdGhpcyBtZXRo
b2Qgd2lsbCByZXR1cm4gbmlsLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0
T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VS
TCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRC
eXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJy
b3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CisKKy8qISBAYWJzdHJhY3QgVGhlIHR5
cGUgb2Ygc2NyaXB0IHByb3ZpZGVkIGR1cmluZyBjcmVhdGlvbi4gKi8KK0Bwcm9wZXJ0eSAocmVh
ZG9ubHkpIEpTU2NyaXB0VHlwZSB0eXBlOworCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJy
b3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCiBAZW5kCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxNzQw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTEgKzM2LDE0IEBACiAjaW1wb3J0ICJQYXJzZXJFcnJvci5oIgogI2ltcG9ydCAi
U3ltYm9sLmgiCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3Rl
bS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2Ny
aXB0IHsKICAgICBfX3dlYWsgSlNWaXJ0dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKKyAg
ICBKU1NjcmlwdFR5cGUgbV90eXBlOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1f
bWFwcGVkU291cmNlOwogICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICBSZXRhaW5QdHI8TlNVUkw+
IG1fY2FjaGVQYXRoOwogICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsK
QEAgLTExNiw2ICsxMTksNTAgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZToo
TlNVUgogICAgIHJldHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBp
blZpcnR1YWxNYWNoaW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0
ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwogfQogCitzdGF0aWMgSlNTY3JpcHQgKmNyZWF0ZUVycm9y
KE5TU3RyaW5nICptZXNzYWdlLCBOU0Vycm9yKiogZXJyb3IpCit7CisgICAgaWYgKGVycm9yKQor
ICAgICAgICAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJKU1NjcmlwdEVycm9y
RG9tYWluIiBjb2RlOjEgdXNlckluZm86QHsgQCJtZXNzYWdlIjogbWVzc2FnZSB9XTsKKyAgICBy
ZXR1cm4gbmlsOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5
cGUpdHlwZSB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgg
ZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90eXBl
ID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJlc3VsdC0+bV9j
YWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KE5TRXJy
b3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFVSTCBmaWxlUGF0
aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKKyAgICBpZiAoIWZpbGVQYXRoVVJMLmlzTG9j
YWxGaWxlKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkZpbGUgcGF0aCAlQCBpcyBub3QgYSBsb2NhbCBmaWxlIiwgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oZmlsZVBhdGhVUkwpXSwgZXJyb3IpOworCisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgU3RyaW5nIHN5c3RlbVBhdGggPSBmaWxlUGF0aFVSTC5maWxlU3lzdGVtUGF0
aCgpOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIGZpbGVEYXRhKHN5c3RlbVBhdGgs
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9y
KFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBhdCBwYXRoICVAIGNvdWxkIG5vdCBi
ZSBtYXBwZWQuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7
CisKKyAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTm90IGFsbCBjaGFy
YWN0ZXJzIGluIGZpbGUgYXQgJUAgYXJlIEFTQ0lJLiIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+
KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2Ny
aXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOwor
ICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZNb3ZlKGZpbGVEYXRhKTsKKyAgICByZXN1
bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAobV9jYWNo
ZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUub3duZWQoKSkKQEAgLTE1Miwy
MiArMTk5LDE0IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpT
Qzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0KIAotLSAodm9pZCl3cml0ZUNh
Y2hlCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsK
LSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1fY2FjaGVQYXRoKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwotICAgIG1fY2FjaGVkQnl0
ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFsTWFjaGluZS52bSwg
bV9qc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAgIGlmIChlcnJvci5pc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVuKFttX2NhY2hlUGF0aCBw
YXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGlmIChmZCA9
PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX0VYIHwg
TE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNv
ZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOworICAg
IFN0cmluZyBlcnJvclN0cmluZyB7IH07CisgICAgW3NlbGYgd3JpdGVDYWNoZTplcnJvclN0cmlu
Z107CisgICAgaWYgKCFlcnJvclN0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuICEhY3Jl
YXRlRXJyb3IoZXJyb3JTdHJpbmcsIGVycm9yKTsKKyAKKyAgICByZXR1cm4gWUVTOwogfQogCiBA
ZW5kCkBAIC0xOTEsMTAgKzIzMCw4IEBAIC0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNh
Y2hlZEJ5dGUKIAogLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29uc3QgSlND
OjpJZGVudGlmaWVyJiltb2R1bGVLZXkKIHsKLSAgICBpZiAobV9qc1NvdXJjZUNvZGUpIHsKLSAg
ICAgICAgQVNTRVJUKG1vZHVsZUtleS5pbXBsKCkgPT0gbV9tb2R1bGVLZXkpOworICAgIGlmICht
X2pzU291cmNlQ29kZSkKICAgICAgICAgcmV0dXJuIG1fanNTb3VyY2VDb2RlLmdldCgpOwotICAg
IH0KIAogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKICAgICBUZXh0UG9z
aXRpb24gc3RhcnRQb3NpdGlvbiB7IH07CkBAIC0yMDIsMTAgKzIzOSw0MCBAQCAtIChKU0M6OkpT
U291cmNlQ29kZSopanNTb3VyY2VDb2RlOihjb25zCiAgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJj
ZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJh
c2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CiAgICAgSlND
OjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUo
dm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwogICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNT
b3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3cml0ZUNhY2hlXTsKICAgICByZXR1cm4ganNTb3VyY2VD
b2RlOwogfQogCistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKK3sKKworICAgIGlm
IChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIGlm
ICghbV9jYWNoZVBhdGgpIHsKKyAgICAgICAgZXJyb3IgPSAibm8gY2FjaGUgcGF0aCBwcm92aWRl
ZCI7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBKU0M6OlBhcnNlckVycm9yIHBh
cnNlckVycm9yOworICAgIGF1dG8ga2V5ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZt
X3ZpcnR1YWxNYWNoaW5lLnZtLCAiQVBJIFBsYWNlaG9sZGVyIHN0cmluZyJfcyk7CisgICAgbV9j
YWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNo
aW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGU6a2V5XS0+c291cmNlQ29kZSgpLCBwYXJzZXJFcnJv
cik7CisgICAgaWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBlcnJvciA9ICJ1
bmFibGUgdG8gZ2VuZXJhdGUgY29tcGxldGUgYnl0ZWNvZGUiOworICAgICAgICByZXR1cm4gTk87
CisgICAgfQorICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcs
IE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAg
IGVycm9yID0gbWFrZVN0cmluZygiVW5hYmxlIHRvIG9wZW4gZmlsZTogIiwgW21fY2FjaGVQYXRo
IHBhdGhdLlVURjhTdHJpbmcsICIgZHVlIHRvIGVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCByZXR1cm5Db2RlID0gZmxvY2soZmQs
IExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICAgICAgZXJyb3Ig
PSAiVW5hYmxlIHRvIGxvY2sgdGhlIGNhY2hlIGZpbGU7IGl0IG1heSBhbHJlYWR5IGJlIGluIHVz
ZS4iOworICAgIGVsc2UKKyAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgp
LCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAh
cmV0dXJuQ29kZTsKK30KIEBlbmQKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAgY2xhc3MgU3RyaW5nOwogLSAoY29uc3QgV1RGOjpTdHJpbmcmKXNvdXJjZTsKIC0g
KGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOwogLSAoSlNDOjpKU1Nv
dXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29uc3QgSlNDOjpJZGVudGlmaWVyJiltb2R1bGVLZXk7
CistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CiAKIEBlbmQKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRlcy5tCShyZXZpc2lv
biAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRl
cy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAvLyBTaW5jZSB3ZSBpbmNsdWRl
IGZpbGVzIHRoYXQgaGF2ZW4ndCBwYXNzZWQgdGhyb3VnaCB0aGUgcmV3cml0ZXIgd2UgbmVlZCB0
byBoYW5kbGUgdGhlIG5vbi1yZXdyaXR0ZW4gdmFsdWVzLi4uCiAjZGVmaW5lIEpTQ19BUElfQVZB
SUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pCisjZGVmaW5lIEpT
Q19BUElfREVQUkVDQVRFRCguLi4pCiAjZGVmaW5lIEpTQ19NQUNfVkVSU0lPTl9UQkEgMAogI2Rl
ZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJBIDAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3
IEBACiAjZW5kaWYKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi12b2lkIHRlc3RPYmplY3Rp
dmVDQVBJKHZvaWQpOwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7CiAjZW5k
aWYKIAogaW50IHRlc3RDQVBJVmlhQ3BwKGNvbnN0IGNoYXIqIGZpbHRlcik7CkBAIC0xMzgwLDEx
ICsxMzgwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgU2V0RXJy
b3JNb2RlKDApOwogI2VuZGlmCiAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBhcmdjID4gMSA/
IGFyZ3ZbMV0gOiBOVUxMOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVj
dGl2ZUNBUEkoKTsKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSShmaWx0ZXIpOwogI2VuZGlmCiAKLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBhcmdjID4gMSA/IGFyZ3ZbMV0gOiBOVUxMOwogICAgIFJF
TEVBU0VfQVNTRVJUKCF0ZXN0Q0FQSVZpYUNwcChmaWx0ZXIpKTsKICAgICBpZiAoZmlsdGVyKQog
ICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0JKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDE0IEBACiAj
aW1wb3J0ICJSZWdyZXNzMTQxMjc1LmgiCiAjaW1wb3J0ICJSZWdyZXNzMTQxODA5LmgiCiAKKyNp
bXBvcnQgPGxpYnByb2MuaD4KICNpbXBvcnQgPHB0aHJlYWQuaD4KICNpbXBvcnQgPHZlY3Rvcj4K
ICNpbXBvcnQgPHd0Zi9NZW1vcnlGb290cHJpbnQuaD4KICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5o
PgogI2ltcG9ydCA8d3RmL0RhdGFMb2cuaD4KIAorCiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJv
bm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiBleHRlcm4gIkMi
IHZvaWQgSlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7
CiAKQEAgLTU0LDcgKzU2LDcgQEAgZXh0ZXJuICJDIiBib29sIF9CbG9ja19oYXNfc2lnbmF0dXJl
KGlkKQogZXh0ZXJuICJDIiBjb25zdCBjaGFyICogX0Jsb2NrX3NpZ25hdHVyZShpZCk7CiAKIGV4
dGVybiBpbnQgZmFpbGVkOwotZXh0ZXJuICJDIiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKHZvaWQp
OworZXh0ZXJuICJDIiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKIGV4dGVy
biAiQyIgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqLCBib29sKTsKIAogI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECkBAIC0xOTg1LDkgKzE5ODcsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNv
ZGVDYWNoZSgpCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIE5TVVJMKiB0ZW1wRGly
ZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1RlbXBvcmFyeURpcmVjdG9yeSgpIGlz
RGlyZWN0b3J5OllFU107CiAKLSAgICAgICAgTlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0
IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAg
IE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wi
OyBleHBvcnQgbGV0IG4gPSBudWxsOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBA
ImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMu
cmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IjsKKyAgICAgICAgTlNTdHJpbmcqIGZv
b1NvdXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQg
biA9IG51bGw7IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9
IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBmb28gPSAoKSA9PiBuOyI7CisgICAgICAg
IE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3Rv
cnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb28o
KTsiOwogCiAgICAgICAgIE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OkAiZm9vLmpzIl07CiAgICAgICAgIE5TVVJMKiBiYXJQYXRoID0g
W3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzIl07CkBA
IC0yMDIzLDEyICsyMDI1LDE0IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKICAg
ICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVNYW5hZ2VyID0gW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFn
ZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBCT09M
IHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciBy
ZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9
IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBlcnJvcjpuaWxdOworICAgICAg
ICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJv
cjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAg
cmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBl
cnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3VsdChAIlJlbW92ZWQgYWxsIHRlbXAgZmlsZXMg
Y3JlYXRlZCIsIHJlbW92ZWRBbGwpOwogICAgIH0KIH0KIApAQCAtMjA3OCw3ICsyMDgyLDcgQEAg
LSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldAogCiBAZW5kCiAKLXN0YXRp
YyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxl
TGVnYWN5U1BJKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAgICAgYXV0byAqY29u
dGV4dCA9IFtKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CkBAIC0yMDg5
LDM0ICsyMDkzLDExOCBAQCBzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCiAgICAgfQog
fQogCi12b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKKworQGludGVyZmFjZSBKU0NvbnRleHRNZW1v
cnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0
ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIHsKK30KKworKyAoaW5zdGFu
Y2V0eXBlKW5ld0NvbnRleHQKK3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dE1lbW9y
eU1hcHBlZExvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJ
ZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFs
dWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBO
U1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmlu
Z11dOworICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0
VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpu
aWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRz
OkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRz
OkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJsZSB0byBjcmVh
dGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVuZAorCitzdGF0aWMgdm9p
ZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgc2l6ZV90IGNvdW50ID0gcHJvY19waWRpbmZv
KGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVn
YXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQ
YXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVX
aXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgc2l6ZV90IGFmdGVyQ291bnQgPSBw
cm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiSlNTY3JpcHQgc2hvdWxkIG5vdCBob2xkIGEgZmlsZSBkZXNjcmlwdG9y
IiwgY291bnQgPT0gYWZ0ZXJDb3VudCk7CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250
ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9CisgICAgc2l6ZV90IGFmdGVyID0gcHJvY19waWRp
bmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgIGNoZWNrUmVzdWx0
KEAiRmlsZSBkZXNjcmlwdG9yIGNvdW50IHNob2x1ZG4ndCBjaGFuZ2UgYWZ0ZXIgY29udGV4dCBp
cyBkZWFsbG9jZWQiLCBjb3VudCA9PSBhZnRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU1Nj
cmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRl
eHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07Cisg
ICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBO
U1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Jhc2ljLmpzIiByZWxhdGl2ZVRv
VVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0g
W0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBlZEZy
b21BU0NJSUZpbGU6dXJsIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBh
bmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworCisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dDEgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdCB3aXRoU291cmNlVVJMOltOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vL2Jhci5qcyJdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBKU1Zh
bHVlICpyZXN1bHQyID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQgd2l0aFNvdXJj
ZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Zvby9iYXouanMiXV07CisKKyAgICAgICAg
X19ibG9jayBib29sIHdhc1JlamVjdGVkID0gZmFsc2U7CisgICAgICAgIFtyZXN1bHQyIGludm9r
ZU1ldGhvZDpAImNhdGNoIiB3aXRoQXJndW1lbnRzOkBbXihKU1ZhbHVlICpyZWFzb24pIHsKKyAg
ICAgICAgICAgIHdhc1JlamVjdGVkID0gW3JlYXNvbiBpc09iamVjdF07CisgICAgICAgIH1dXTsK
KworICAgICAgICBjaGVja1Jlc3VsdChAIk1vZHVsZSBKU1NjcmlwdCBpbXBvcnRlZCB3aXRoIGRp
ZmZlcmVudCBpZGVudGlmaWVycyBpcyByZWplY3RlZCIsIHdhc1JlamVjdGVkKTsKKyAgICB9Cit9
CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgXAorICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVz
dCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIE5TTG9nKEAiJXMuLi5cbiIsICN0
ZXN0KTsgXAorICAgICAgICB0ZXN0OyBcCisgICAgICAgIE5TTG9nKEAiJXM6IGRvbmUuXG4iLCAj
dGVzdCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShj
b25zdCBjaGFyKiBmaWx0ZXIpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQ
SSIpOwogCi0gICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKLSAgICBydW5KSVRUaHJlYWRM
aW1pdFRlc3RzKCk7CisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3Qp
IC0+IGJvb2wgeworICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgcmV0dXJuIHN0cmNh
c2VzdHIodGVzdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAg
IFJVTihjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpKTsKKyAgICBSVU4ocnVuSklUVGhyZWFkTGlt
aXRUZXN0cygpKTsKKworICAgIFJVTih0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVS
TCgpKTsKKyAgICBSVU4odGVzdEZldGNoKCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVHdvQ3lj
bGUoKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkpOworICAgIFJVTih0ZXN0
SW1wb3J0TW9kdWxlVHdpY2UoKSk7CisgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlKCkpOwogCi0g
ICAgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2go
KTsKLSAgICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVD
eWNsZSgpOwotICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNh
Y2hlKCk7CisgICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJV
Tih0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVj
dHNOaWxTY3JpcHRVUkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7Cisg
ICAgUlVOKHRlc3RKU1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRl
c3RMb2FkQmFzaWNGaWxlKCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkp
OworICAgIFJVTih0ZXN0TG9hZEJhc2ljRmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0
b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJl
c29sdXRpb246OlJlamVjdEVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRp
b246OlJlc29sdmVMYXRlKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
amVjdExhdGUpOwotICAgIHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlz
ZUNyZWF0ZVJlc29sdmVkKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFy
YWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZWplY3RFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJl
c29sdXRpb246OlJlc29sdmVMYXRlKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVz
b2x1dGlvbjo6UmVqZWN0TGF0ZSkpOworICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlv
bigpKTsKKyAgICBSVU4ocHJvbWlzZUNyZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNl
Q3JlYXRlUmVqZWN0ZWQoKSk7CisgICAgUlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkp
OwogCiAgICAgdGVzdE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyNDE3NDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNSw5ICsyMTUsMTAgQEAgY2xhc3MgRGVjb2RlciB7CiAgICAgV1RGX0ZPUkJJ
RF9IRUFQX0FMTE9DQVRJT047CiAKIHB1YmxpYzoKLSAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qg
dm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgIERlY29kZXIoVk0mIHZtLCBjb25z
dCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUsIFVSTCYmIHNvdXJjZVVSTE92ZXJyaWRl
KQogICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisgICAgICAgICwgbV9zb3VyY2VV
UkxPdmVycmlkZShXVEZNb3ZlKHNvdXJjZVVSTE92ZXJyaWRlKSkKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICwgbV9zaXplKHNpemUpCiAjZW5kaWYKQEAgLTI1OSw5ICsyNjAsMTIgQEAgcHVibGlj
OgogICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4pOwogICAgIH0KIAorICAgIGNv
bnN0IFVSTCYgc291cmNlVVJMT3ZlcnJpZGUoKSB7IHJldHVybiBtX3NvdXJjZVVSTE92ZXJyaWRl
OyB9CisKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgdWludDhfdCogbV9iYXNl
QWRkcmVzczsKKyAgICBVUkwgbV9zb3VyY2VVUkxPdmVycmlkZTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc2l6ZV90IG1fc2l6ZTsKICNlbmRpZgpAQCAtMTMwMSwxMCArMTMwNSwxNiBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBTdHJpbmcgZGVjb2RlZFNvdXJjZSA9IG1fc291cmNlLmRlY29kZShk
ZWNvZGVyKTsKICAgICAgICAgU291cmNlT3JpZ2luIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBtX3Nv
dXJjZU9yaWdpbi5kZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIFN0cmluZyBkZWNvZGVkVVJMID0g
bV91cmwuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTFN0cmluZyA9
IG1fdXJsLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgVVJMIHNvdXJjZVVSTDsKKyAgICAgICAg
aWYgKGRlY29kZXIuc291cmNlVVJMT3ZlcnJpZGUoKSkgeworICAgICAgICAgICAgZGVjb2RlZFNv
dXJjZU9yaWdpbiA9IFNvdXJjZU9yaWdpbiB7IGRlY29kZXIuc291cmNlVVJMT3ZlcnJpZGUoKSB9
OworICAgICAgICAgICAgc291cmNlVVJMID0gZGVjb2Rlci5zb3VyY2VVUkxPdmVycmlkZSgpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IFVSTChVUkwoKSwgZGVjb2Rl
ZFVSTFN0cmluZyk7CiAgICAgICAgIFRleHRQb3NpdGlvbiBkZWNvZGVkU3RhcnRQb3NpdGlvbiA9
IG1fc3RhcnRQb3NpdGlvbi5kZWNvZGUoZGVjb2Rlcik7CiAKLSAgICAgICAgUmVmPFN0cmluZ1Nv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVh
dGUoZGVjb2RlZFNvdXJjZSwgZGVjb2RlZFNvdXJjZU9yaWdpbiwgVVJMKFVSTCgpLCBkZWNvZGVk
VVJMKSwgZGVjb2RlZFN0YXJ0UG9zaXRpb24sIHNvdXJjZVR5cGUpOworICAgICAgICBSZWY8U3Ry
aW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gU3RyaW5nU291cmNlUHJvdmlkZXI6
OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291cmNlT3JpZ2luLCBXVEZNb3ZlKHNvdXJj
ZVVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKTsKICAgICAgICAgQmFzZTo6
ZGVjb2RlKGRlY29kZXIsIHNvdXJjZVByb3ZpZGVyLmdldCgpKTsKICAgICAgICAgcmV0dXJuICZz
b3VyY2VQcm92aWRlci5sZWFrUmVmKCk7CiAgICAgfQpAQCAtMjA4MCwxMCArMjA5MCwxMCBAQCBz
dGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVuCiAgICAgcmV0dXJuIGVuY29k
ZXIucmVsZWFzZSgpOwogfQogCi1VbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1w
bChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBz
aXplX3Qgc2l6ZSkKK1VubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBz
aXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSkKIHsKICAgICBjb25zdCBhdXRvKiBjYWNoZWRF
bnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR2VuZXJpY0NhY2hlRW50cnkqPihidWZmZXIp
OwotICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXplKTsKKyAgICBEZWNvZGVyIGRl
Y29kZXIodm0sIGJ1ZmZlciwgc2l6ZSwgV1RGTW92ZShzb3VyY2VVUkxPdmVycmlkZSkpOwogICAg
IHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGVudHJ5OwogICAg
IHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlIDx3dGYv
TWFsbG9jUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMzQsMTMgKzM1LDEzIEBAIGNsYXNzIFNvdXJjZUNvZGVLZXk7CiBjbGFzcyBVbmxpbmtlZENv
ZGVCbG9jazsKIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVD
b2RlQmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxv
Y2sqKTsKLVVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3Qg
U291cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOworVW5saW5rZWRDb2RlQmxvY2sq
IGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9p
ZCosIHNpemVfdCwgVVJMJiYpOwogCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJs
b2NrVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXpl
KQorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUsIFVSTCYm
IHNvdXJjZVVSTE92ZXJyaWRlID0gVVJMKCkpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2RlQmxvY2tJbXBsKHZtLCBrZXksIGJ1ZmZlciwgc2l6
ZSkpOworICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29k
ZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUsIFdURk1vdmUoc291cmNlVVJMT3ZlcnJp
ZGUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362364</attachid>
            <date>2019-02-18 20:01:00 -0800</date>
            <delta_ts>2019-02-18 20:49:38 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>34893</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCk7
CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBA
QAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0
ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNTY3JpcHRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50
ZXJuYWwuaCIKQEAgLTE2Miw5ICsxNjQsOSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9i
YWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKIAogICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2Jh
bE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2
ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKICAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwogCkBAIC0xNzUsNyArMTc3LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3Jp
cHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3Vy
Y2UgPSBbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxl
S2V5XTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBvbGRNb2R1bGVLZXkgPSBzb3VyY2UtPnNvdXJj
ZUNvZGUoKS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKS5zdHJpbmcoKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1bGVLZXkpICE9IG1v
ZHVsZUtleSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZm
ZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93
OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVy
cmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91
bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVm
aW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAg
ICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZl
KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyMjAsMjEgQEAgSlNP
YmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJv
cGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRl
SlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCkKK3sKKyAgICBBU1NF
UlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBbdXJsIGFic29sdXRlU3Ry
aW5nXSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVN
b2R1bGUoZ2xvYmFsRXhlYygpLCBbc2NyaXB0IGpzU291cmNlQ29kZTprZXldLT5zb3VyY2VDb2Rl
KCksIGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBy
ZXN1bHQtPnJlc29sdmUoZ2xvYmFsRXhlYygpLCBwcm9taXNlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywyNSArNDcs
MTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2Ny
aXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCitKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5h
bChjb25zdCBKU0xvY2tIb2xkZXImLCBFeGVjU3RhdGUqIGV4ZWMsIEpTQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmICghY3R4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bSk7Ci0KICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0ID0gdG9KUyh0aGlzT2Jq
ZWN0KTsKIAotICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGlu
ZU51bWJlcik7Ci0KICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0byB0aGUgZ2xvYmFsIG9i
amVjdCBpZiBpdCBpcyBOVUxMCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7Ci0gICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBz
b3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCk7Ci0gICAgU291cmNlQ29k
ZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNv
dXJjZVVSTFN0cmluZyB9LCBVUkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24o
T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGlu
YWxOdW1iZXIoKSkpOwotCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0
aW9uOwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBwcm9maWxlZEV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBQcm9maWxpbmdSZWFzb246OkFQSSwgc291cmNlLCBqc1RoaXNP
YmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCkBAIC05MCw2ICs3NywyNCBAQCBKU1ZhbHVl
UmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMs
IGpzVW5kZWZpbmVkKCkpOwogfQogCitKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250
ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBK
U1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOworCisgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdM
aW5lTnVtYmVyKTsKKworICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291
cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOworICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFr
ZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcg
fSwgVVJMKHsgfSwgc291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6
OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsK
KworICAgIHJldHVybiBKU0V2YWx1YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBjdHgs
IHRoaXNPYmplY3QsIHNvdXJjZSwgZXhjZXB0aW9uKTsKK30KKwogYm9vbCBKU0NoZWNrU2NyaXB0
U3ludGF4KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNTdHJpbmdSZWYg
c291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7CiAgICAgaWYgKCFjdHgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE3ICsxMDMsMzcgQEAgLSAoSlNWYWx1
ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKQogICAgIHJldHVybiBbc2VsZiBldmFsdWF0
ZVNjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVSTDpuaWxdOwogfQogCi0tIChKU1ZhbHVlICopZXZh
bHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291
cmNlVVJMCitzdGF0aWMgSlNWYWx1ZSAqZXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0ICpjb250ZXh0
LCBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHNvdXJjZSwgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiB1
cmwpCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51bGxwdHI7CisgICAgSlNW
YWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQtPm1fY29udGV4dCwgc291
cmNlLmdldCgpLCBudWxscHRyLCB1cmwuZ2V0KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisKKyAg
ICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKEpTVmFs
dWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNV
UkwgKilzb3VyY2VVUkwKK3sKICAgICBhdXRvIHNjcmlwdEpTID0gT3BhcXVlSlNTdHJpbmc6OnRy
eUNyZWF0ZShzY3JpcHQpOwogICAgIGF1dG8gc291cmNlVVJMSlMgPSBPcGFxdWVKU1N0cmluZzo6
dHJ5Q3JlYXRlKFtzb3VyY2VVUkwgYWJzb2x1dGVTdHJpbmddKTsKLSAgICBKU1ZhbHVlUmVmIHJl
c3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LCBzY3JpcHRKUy5nZXQoKSwgbnVsbHB0
ciwgc291cmNlVVJMSlMuZ2V0KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisgICAgcmV0dXJuIGV2
YWx1YXRlU2NyaXB0KHNlbGYsIHNjcmlwdEpTLCBzb3VyY2VVUkxKUyk7Cit9CiAKLSAgICBpZiAo
ZXhjZXB0aW9uVmFsdWUpCi0gICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNl
cHRpb246ZXhjZXB0aW9uVmFsdWVdOworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3JpcHQ6KEpT
U2NyaXB0ICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKHNj
cmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtKSB7CisgICAgICAgIFN0cmluZyBzb3Vy
Y2UgPSBbc2NyaXB0IHNvdXJjZV07CisgICAgICAgIHJldHVybiBldmFsdWF0ZVNjcmlwdChzZWxm
LCBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKFdURk1vdmUoc291cmNlKSksIE9wYXF1ZUpTU3Ry
aW5nOjp0cnlDcmVhdGUoW3VybCBhYnNvbHV0ZVN0cmluZ10pKTsKKyAgICB9CisKKyAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpT
Qzo6SlNBUElHbG9iYWxPYmplY3QqPih2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
KyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0
aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JG
cm9tTWVzc2FnZTpAIkNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBtb2R1bGUgbG9hZGluZyIgaW5D
b250ZXh0OnNlbGZdIGluQ29udGV4dDpzZWxmXTsKIAotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNvbnRleHQ6c2VsZl07CisgICAgcmV0dXJuIFtKU1Zh
bHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYodm0sIGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2
YWx1YXRlSlNTY3JpcHRNb2R1bGUoc2NyaXB0LCB1cmwpKSBpbkNvbnRleHQ6c2VsZl07CiB9CiAK
IC0gKHZvaWQpc2V0RXhjZXB0aW9uOihKU1ZhbHVlICopdmFsdWUKQEAgLTMwMCw2ICszMjAsMTEg
QEAgLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZQogICAgIHJldHVybiBO
TzsKIH0KIAorLSAoSlNWYWx1ZSAqKXZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbldpdGhTdHJpbmc6
KFN0cmluZyYpc3RyaW5nCit7CisgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOnN0cmluZyBpbkNvbnRl
eHQ6c2VsZl0uSlNWYWx1ZVJlZl07Cit9CisKIC0gKHZvaWQpYmVnaW5DYWxsYmFja1dpdGhEYXRh
OihDYWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGEgY2FsbGVlVmFsdWU6KEpTVmFsdWVSZWYpY2Fs
bGVlVmFsdWUgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVudENvdW50Oihz
aXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYgKilhcmd1bWVu
dHMKIHsKICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDI0
MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdh
dGUgdGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90
ZSwgdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5
IFVJV2ViVmlldy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVM
b2FkZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFj
b3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBtZXRob2QKKyBA
YWJzdHJhY3QgUnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNTY3JpcHQgdG8g
ZXZhbHVhdGUuCisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0IHdhcyBjcmVh
dGVkIHdpdGggSlNTY3JpcHRUeXBlUHJvZ3JhbSwgdGhlIHNjcmlwdCB3aWxsIHJ1biBzeW5jaHJv
bm91c2x5IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uLgorCisgT3RoZXJ3aXNl
LCBpZiB0aGUgc2NyaXB0IHdhcyBjcmVhdGVkIHdpdGggSlNTY3JpcHRUeXBlTW9kdWxlLCB0aGUg
bW9kdWxlIHdpbGwgYmUgcnVuIGFzeW5jaHJvbm91c2x5IGFuZCB3aWxsIHJldHVybiBhIHByb21p
c2UgcmVzb2x2ZWQgd2hlbiB0aGUgbW9kdWxlIGFuZCBhbnkgdHJhbnNpdGl2ZSBkZXBlbmRlbmNp
ZXMgYXJlIGxvYWRlZC4gVGhlIG1vZHVsZSBsb2FkZXIgd2lsbCB0cmVhdCB0aGUgc2NyaXB0IGFz
IGlmIGl0IGhhZCBiZWVuIHJldHVybmVkIGZyb20gYSBkZWxlZ2F0ZSBjYWxsIHRvIG1vZHVsZUxv
YWRlckRlbGVnYXRlIHdpdGggaXRzIGlkZW50ZWZpZXIgYXMgdXJsLiBUaGlzIG1pcnJvcnMgdGhl
IEphdmFTY3JpcHQgZHluYW1pYyBpbXBvcnQgb3BlcmF0aW9uLgorICovCistIChKU1ZhbHVlICop
ZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNVUkwg
Kil1cmw7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdC5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDE4IEBAIE5TX0FTU1VNRV9OT05O
VUxMX0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1Nj
cmlwdFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1
dGlvbiB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJv
Z3JhbSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFu
dCAgICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRoZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3Jp
cHQgcHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBl
KSB7CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0sCisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwK
K307CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlND
X0lPU19UQkEpKQogQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CiAKQEAgLTQxLDcgKzUz
LDcgQEAgSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLAogIEBwYXJhbSB2
bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCiAg
QHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291
cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5l
ICopdm0gSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9T
X1RCQSkpOwogCiAvKiEKICBAbWV0aG9kCkBAIC01NSwxMyArNjcsNDQgQEAgSlNDX0NMQVNTX0FW
QUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLAogCiAgSWYgdGhlIGZpbGUgYXQgZmlsZVBhdGgg
aXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4KICAqLwotKyAobnVsbGFi
bGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVs
bGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUg
TlNVUkwgKiljYWNoZVBhdGg7Ci0KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9t
QVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQ
YXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIEpTQ19BUElf
REVQUkVDQVRFRChtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKIAogLyoh
CiAgVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFsZW50IHRvIHNjcmlwdEZyb21BU0NJ
SUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTou
CiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxsYWJsZSBpbnN0YW5jZXR5
cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICop
Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQ
YXRoIEpTQ19BUElfREVQUkVDQVRFRChtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19U
QkEpKTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3Ig
dGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUuCisgQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Yg
SmF2YVNjcmlwdCBzb3VyY2UuCisgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNl
IHdoZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB2bSBU
aGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBh
cmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91
bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRp
b24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBp
cyBuaWwuCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJv
ciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKKworLyohCisgQG1ldGhvZAorIEBhYnN0
cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUg
d2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFy
YW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KKyBAcGFyYW0gZmlsZVBhdGgg
QSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlz
ay4KKyBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZh
bHVhdGVkIGluLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3
aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJhbSBl
cnJvciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVk
IGlmIHRoZSByZXN1bHQgaXMgbmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1
c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBiZSBl
eHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlzIG1ldGhvZCB3
aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgorCisgSWYgdGhlIGZpbGUg
YXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4KKyAq
LworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5
cGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxN
YWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUg
TlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxh
YmxlKWVycm9yOworCisvKiEgQGFic3RyYWN0IFRoZSB0eXBlIG9mIHNjcmlwdCBwcm92aWRlZCBk
dXJpbmcgY3JlYXRpb24uICovCitAcHJvcGVydHkgKHJlYWRvbmx5KSBKU1NjcmlwdFR5cGUgdHlw
ZTsKKworLSAoQk9PTCljYWNoZUJ5dGVjb2RlV2l0aEVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxs
YWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHQubW0JKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxNCBAQAog
I2ltcG9ydCAiUGFyc2VyRXJyb3IuaCIKICNpbXBvcnQgIlN5bWJvbC5oIgogI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAKIEBpbXBsZW1lbnRhdGlvbiBKU1NjcmlwdCB7CiAgICAgX193ZWFrIEpTVmly
dHVhbE1hY2hpbmUqIG1fdmlydHVhbE1hY2hpbmU7CisgICAgSlNTY3JpcHRUeXBlIG1fdHlwZTsK
KyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtX21hcHBlZFNvdXJjZTsKICAgICBTdHJp
bmcgbV9zb3VyY2U7CiAgICAgUmV0YWluUHRyPE5TVVJMPiBtX2NhY2hlUGF0aDsKICAgICBKU0M6
OkNhY2hlZEJ5dGVjb2RlIG1fY2FjaGVkQnl0ZWNvZGU7CkBAIC0xMTYsNiArMTE5LDUwIEBAICsg
KGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVIKICAgICByZXR1cm4gW0pTU2Ny
aXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRo
Q29kZVNpZ25pbmc6Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsK
IH0KIAorc3RhdGljIEpTU2NyaXB0ICpjcmVhdGVFcnJvcihOU1N0cmluZyAqbWVzc2FnZSwgTlNF
cnJvcioqIGVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gW05TRXJy
b3IgZXJyb3JXaXRoRG9tYWluOkAiSlNTY3JpcHRFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZv
OkB7IEAibWVzc2FnZSI6IG1lc3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoaW5z
dGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFu
ZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihOU0Vycm9yICoqKWVycm9y
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tb
SlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVh
bE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5t
X3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpT
U2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBh
dGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2RlQ2Fj
aGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRl
VVJMXSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1
cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGggJUAg
aXMgbm90IGEgbG9jYWwgZmlsZSIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGZpbGVQYXRoVVJM
KV0sIGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBzeXN0
ZW1QYXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFwcGVkLiIsIHN0YXRpY19jYXN0
PE5TU3RyaW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0ZXJz
QXJlQWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEo
KSksIGZpbGVEYXRhLnNpemUoKSkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5vdCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFy
ZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsK
KworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+
bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0ltcGw6
OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxl
RGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVkU291
cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hl
UGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
LSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpICYmICFt
X2NhY2hlZEJ5dGVjb2RlLm93bmVkKCkpCkBAIC0xNTIsMjIgKzE5OSwxNCBAQCAtICh2b2lkKXJl
YWRDYWNoZQogICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OkNhY2hlZEJ5dGVjb2RlIHsgYnVm
ZmVyLCBzaXplIH07CiB9CiAKLS0gKHZvaWQpd3JpdGVDYWNoZQorLSAoQk9PTCljYWNoZUJ5dGVj
b2RlV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7Ci0gICAgaWYgKG1fY2FjaGVkQnl0ZWNv
ZGUuc2l6ZSgpIHx8ICFtX2NhY2hlUGF0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpQ
YXJzZXJFcnJvciBlcnJvcjsKLSAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1v
ZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VD
b2RlKCksIGVycm9yKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVB
VCB8IE9fV1JPTkxZLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgIHJldHVybjsK
LSAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlmICghcmMp
Ci0gICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRl
Y29kZS5zaXplKCkpOwotICAgIGNsb3NlKGZkKTsKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmcgeyB9
OworICAgIFtzZWxmIHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICghZXJyb3JTdHJp
bmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAhIWNyZWF0ZUVycm9yKGVycm9yU3RyaW5nLCBl
cnJvcik7CisgCisgICAgcmV0dXJuIFlFUzsKIH0KIAogQGVuZApAQCAtMTkxLDEwICsyMzAsOCBA
QCAtIChjb25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKiljYWNoZWRCeXRlCiAKIC0gKEpTQzo6SlNT
b3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5
CiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VSVChtb2R1bGVLZXku
aW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNvZGUpCiAgICAgICAg
IHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKLSAgICB9CiAKICAgICBKU0M6OlZNJiB2bSA9
IG1fdmlydHVhbE1hY2hpbmUudm07CiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24geyB9
OwpAQCAtMjAyLDEwICsyMzksNDAgQEAgLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29k
ZTooY29ucwogICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJv
dmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9u
Lm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJj
ZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUp
KTsKICAgICBtX2pzU291cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYg
d3JpdGVDYWNoZV07CiAgICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAorLSAoQk9PTCl3cml0
ZUNhY2hlOihTdHJpbmcmKWVycm9yCit7CisKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXpl
KCkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAg
ICAgIGVycm9yID0gIm5vIGNhY2hlIHBhdGggcHJvdmlkZWQiOworICAgICAgICByZXR1cm4gTk87
CisgICAgfQorCisgICAgSlNDOjpQYXJzZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBhdXRvIGtl
eSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92aXJ0dWFsTWFjaGluZS52bSwgIkFQ
SSBQbGFjZWhvbGRlciBzdHJpbmciX3MpOworICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6Omdl
bmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFsTWFjaGluZS52bSwgW3NlbGYganNTb3VyY2VD
b2RlOmtleV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgIGlmIChwYXJzZXJFcnJv
ci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZXJyb3IgPSAidW5hYmxlIHRvIGdlbmVyYXRlIGNvbXBs
ZXRlIGJ5dGVjb2RlIjsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBpbnQgZmQgPSBv
cGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2
NjYpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVu
YWJsZSB0byBvcGVuIGZpbGU6ICIsIFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCAiIGR1
ZSB0byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5POworICAg
IH0KKyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Cisg
ICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0gIlVuYWJsZSB0byBsb2NrIHRoZSBj
YWNoZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2UuIjsKKyAgICBlbHNlCisgICAgICAg
IHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRlY29kZS5zaXpl
KCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7Cit9CiBAZW5kCiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJ
KHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFN0cmluZzsK
IC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7CiAtIChjb25zdCBKU0M6OkNhY2hlZEJ5dGVj
b2RlKiljYWNoZWRCeXRlY29kZTsKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6
KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5OworLSAoQk9PTCl3cml0ZUNhY2hlOihT
dHJpbmcmKWVycm9yOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdEluY2x1ZGVzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogLy8gU2luY2Ugd2UgaW5jbHVkZSBmaWxlcyB0aGF0IGhhdmVuJ3QgcGFz
c2VkIHRocm91Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBub24tcmV3cml0
dGVuIHZhbHVlcy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCiAjZGVmaW5lIEpT
Q19DTEFTU19BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQog
I2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RC
QSAwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShy
ZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkuYwkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogI2VuZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNw
cChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwxMSArMTM4MCwxMSBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNldEVycm9yTW9kZSgwKTsKICNlbmRpZgogCisg
ICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHRlc3RPYmplY3RpdmVDQVBJKCk7CisgICAgdGVzdE9i
amVjdGl2ZUNBUEkoZmlsdGVyKTsKICNlbmRpZgogCi0gICAgY29uc3QgY2hhciogZmlsdGVyID0g
YXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElW
aWFDcHAoZmlsdGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAy
NDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxNCBAQAogI2ltcG9ydCAiUmVncmVzczE0MTI3NS5o
IgogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCisjaW1wb3J0IDxsaWJwcm9jLmg+CiAjaW1w
b3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5Rm9v
dHByaW50Lmg+CiAjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9EYXRhTG9n
Lmg+CiAKKwogZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnZ2luZyhKU0NvbnRleHRSZWYpOwogZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNFZGVu
Q29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCkBAIC01NCw3ICs1Niw3IEBAIGV4
dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFzX3NpZ25hdHVyZShpZCkKIGV4dGVybiAiQyIgY29uc3Qg
Y2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQpOwogCiBleHRlcm4gaW50IGZhaWxlZDsKLWV4dGVy
biAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7CiBleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQo
TlNTdHJpbmcgKiwgYm9vbCk7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRApAQCAtMTk4NSw5
ICsxOTg3LDkgQEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgIEBhdXRvcmVs
ZWFzZXBvb2wgewogICAgICAgICBOU1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOwogCi0gICAg
ICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpz
XCI7IGV4cG9ydCBsZXQgZm9vID0gbjsiOwotICAgICAgICBOU1N0cmluZyogYmFyU291cmNlID0g
QCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsi
OwotICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tIFwi
Li4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQg
ZXhwID0gZm9vOyI7CisgICAgICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCBcIm90
aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7CisgICAgICAgIE5T
U3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4
cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0g
QCJpbXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlz
LnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7IjsKIAogICAgICAgICBOU1VSTCog
Zm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZv
by5qcyJdOwogICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwpAQCAtMjAyMywxMiArMjAyNSwxNCBAQCBz
dGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAgICAgICAgIH0KIAogICAgICAgICBOU0Zp
bGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsK
LSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVycm9yOm5pbF07
Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBlcnJvcjpuaWxd
OwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6bmls
XTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJy
b3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBh
dGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpD
YWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gdHJ1ZTsKKyAg
ICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGgg
ZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1h
bmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3Zl
ZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpu
aWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6
YmFyQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5h
Z2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVkQWxsKTsK
ICAgICB9CiB9CiAKQEAgLTIwNzgsNyArMjA4Miw3IEBAIC0gKHZvaWQpY29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dCBmZXQKIAogQGVuZAogCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmls
ZSgpCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpCiB7CiAgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxv
YWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOwpAQCAtMjA4OSwzNCArMjA5MywxMTggQEAgc3RhdGlj
IHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSgpCisKK0BpbnRlcmZhY2UgSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUg
OiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSlu
ZXdDb250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRNZW1vcnlNYXBw
ZWRMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7Cisg
ICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBh
bGxvY10gaW5pdF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlk
ZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RI
YW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRvICpzY3JpcHQg
PSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVk
RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1h
Y2hpbmUgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQor
ICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UK
KyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5l
d0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNv
bnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQor
eworICAgIHNpemVfdCBjb3VudCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNU
RkRTLCAwLCAwLCAwKTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29u
dGV4dCA9IFtKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsK
KyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAg
IEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnLi9i
YXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAg
ICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4
dF07CisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQ
Uk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBjaGVja1Jlc3VsdChAIkpTU2NyaXB0
IHNob3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIsIGNvdW50ID09IGFmdGVyQ291bnQp
OworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7Cisg
ICAgfQorICAgIHNpemVfdCBhZnRlciA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURM
SVNURkRTLCAwLCAwLCAwKTsKKyAgICBjaGVja1Jlc3VsdChAIkZpbGUgZGVzY3JpcHRvciBjb3Vu
dCBzaG9sdWRuJ3QgY2hhbmdlIGFmdGVyIGNvbnRleHQgaXMgZGVhbGxvY2VkIiwgY291bnQgPT0g
YWZ0ZXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNTY3JpcHRVUkwoKQoreworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dE1lbW9yeU1h
cHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxv
YWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiLi9iYXNpYy5qcyIgcmVsYXRpdmVUb1VSTDpyZXNvbHZlUGF0aFRvU2NyaXB0
cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6
a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOnVybCBpblZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJy
b3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQxID0gW2NvbnRleHQgZXZhbHVhdGVK
U1NjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Zv
by9iYXIuanMiXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4
dCwgcmVzdWx0MSwgbnVsbCk7CisKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0MiA9IFtjb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6c2NyaXB0IHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpAIi9mb28vYmF6LmpzIl1dOworCisgICAgICAgIF9fYmxvY2sgYm9vbCB3YXNSZWplY3Rl
ZCA9IGZhbHNlOworICAgICAgICBbcmVzdWx0MiBpbnZva2VNZXRob2Q6QCJjYXRjaCIgd2l0aEFy
Z3VtZW50czpAW14oSlNWYWx1ZSAqcmVhc29uKSB7CisgICAgICAgICAgICB3YXNSZWplY3RlZCA9
IFtyZWFzb24gaXNPYmplY3RdOworICAgICAgICB9XV07CisKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJNb2R1bGUgSlNTY3JpcHQgaW1wb3J0ZWQgd2l0aCBkaWZmZXJlbnQgaWRlbnRpZmllcnMgaXMg
cmVqZWN0ZWQiLCB3YXNSZWplY3RlZCk7CisgICAgfQorfQorCisjZGVmaW5lIFJVTih0ZXN0KSBk
byB7IFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSBcCisgICAgICAgICAgICBicmVh
azsgXAorICAgICAgICBOU0xvZyhAIiVzLi4uXG4iLCAjdGVzdCk7IFwKKyAgICAgICAgdGVzdDsg
XAorICAgICAgICBOU0xvZyhAIiVzOiBkb25lLlxuIiwgI3Rlc3QpOyBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciogZmlsdGVyKQogewog
ICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKIAotICAgIGNoZWNrTmVnYXRp
dmVOU0ludGVnZXJzKCk7Ci0gICAgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpOworICAgIGF1dG8g
c2hvdWxkUnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0KSAtPiBib29sIHsKKyAgICAgICAgaWYg
KGZpbHRlcikKKyAgICAgICAgICAgIHJldHVybiBzdHJjYXNlc3RyKHRlc3QsIGZpbHRlcik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBSVU4oY2hlY2tOZWdhdGl2ZU5TSW50
ZWdlcnMoKSk7CisgICAgUlVOKHJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKSk7CisKKyAgICBSVU4o
dGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRlc3RGZXRj
aCgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFR3b0N5Y2xlKCkpOworICAgIFJVTih0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSgpKTsKKyAgICBSVU4odGVzdEltcG9ydE1vZHVsZVR3aWNlKCkpOwor
ICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZSgpKTsKIAotICAgIHRlc3RMb2FkZXJSZXNvbHZlc0Fi
c29sdXRlU2NyaXB0VVJMKCk7Ci0gICAgdGVzdEZldGNoKCk7Ci0gICAgdGVzdEZldGNoV2l0aFR3
b0N5Y2xlKCk7Ci0gICAgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKTsKLSAgICB0ZXN0SW1wb3J0
TW9kdWxlVHdpY2UoKTsKLSAgICB0ZXN0Qnl0ZWNvZGVDYWNoZSgpOworICAgIFJVTih0ZXN0TG9h
ZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpKTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNGYWls
ZWRGZXRjaCgpKTsKIAotICAgIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCk7Ci0gICAg
dGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOworICAgIFJVTih0ZXN0SlNTY3JpcHRVUkwo
KSk7CiAKICAgICAvLyBGaWxlIGxvYWRpbmcKLSAgICB0ZXN0TG9hZEJhc2ljRmlsZSgpOworICAg
IFJVTih0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpKTsKKyAgICBSVU4odGVzdExvYWRCYXNp
Y0ZpbGUoKSk7CiAKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVF
YWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7
Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7Ci0gICAg
cHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKTsKLSAgICBwcm9taXNl
UmVqZWN0T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VDcmVhdGVSZXNvbHZlZCgpOwotICAg
IHByb21pc2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0
KCk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUVhZ2Vy
KSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIp
KTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSkp
OworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUpKTsK
KyAgICBSVU4ocHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKSk7CisgICAgUlVOKHByb21pc2VD
cmVhdGVSZXNvbHZlZCgpKTsKKyAgICBSVU4ocHJvbWlzZUNyZWF0ZVJlamVjdGVkKCkpOworICAg
IFJVTihwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpKTsKIAogICAgIHRlc3RPYmplY3RpdmVD
QVBJTWFpbigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOSArMjE1LDEw
IEBAIGNsYXNzIERlY29kZXIgewogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwogCiBw
dWJsaWM6Ci0gICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXpl
X3Qgc2l6ZSkKKyAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNp
emVfdCBzaXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSkKICAgICAgICAgOiBtX3ZtKHZtKQog
ICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
YmFzZUFkZHJlc3MpKQorICAgICAgICAsIG1fc291cmNlVVJMT3ZlcnJpZGUoV1RGTW92ZShzb3Vy
Y2VVUkxPdmVycmlkZSkpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fc2l6ZShzaXplKQog
I2VuZGlmCkBAIC0yNTksOSArMjYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9maW5hbGl6ZXJz
LmFkZChvZmZzZXQsIGZuKTsKICAgICB9CiAKKyAgICBjb25zdCBVUkwmIHNvdXJjZVVSTE92ZXJy
aWRlKCkgeyByZXR1cm4gbV9zb3VyY2VVUkxPdmVycmlkZTsgfQorCiBwcml2YXRlOgogICAgIFZN
JiBtX3ZtOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisgICAgVVJMIG1fc291
cmNlVVJMT3ZlcnJpZGU7CiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX3NpemU7CiAjZW5k
aWYKQEAgLTEzMDEsMTAgKzEzMDUsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU3RyaW5n
IGRlY29kZWRTb3VyY2UgPSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CiAgICAgICAgIFNvdXJj
ZU9yaWdpbiBkZWNvZGVkU291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29k
ZXIpOwotICAgICAgICBTdHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgU3RyaW5nIGRlY29kZWRVUkxTdHJpbmcgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIFVSTCBzb3VyY2VVUkw7CisgICAgICAgIGlmIChkZWNvZGVyLnNvdXJjZVVSTE92
ZXJyaWRlKCkpIHsKKyAgICAgICAgICAgIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBTb3VyY2VPcmln
aW4geyBkZWNvZGVyLnNvdXJjZVVSTE92ZXJyaWRlKCkgfTsKKyAgICAgICAgICAgIHNvdXJjZVVS
TCA9IGRlY29kZXIuc291cmNlVVJMT3ZlcnJpZGUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzb3VyY2VVUkwgPSBVUkwoVVJMKCksIGRlY29kZWRVUkxTdHJpbmcpOwogICAgICAgICBU
ZXh0UG9zaXRpb24gZGVjb2RlZFN0YXJ0UG9zaXRpb24gPSBtX3N0YXJ0UG9zaXRpb24uZGVjb2Rl
KGRlY29kZXIpOwogCi0gICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29k
ZWRTb3VyY2VPcmlnaW4sIFVSTChVUkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0
aW9uLCBzb3VyY2VUeXBlKTsKKyAgICAgICAgUmVmPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciA9IFN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoZGVjb2RlZFNvdXJjZSwg
ZGVjb2RlZFNvdXJjZU9yaWdpbiwgV1RGTW92ZShzb3VyY2VVUkwpLCBkZWNvZGVkU3RhcnRQb3Np
dGlvbiwgc291cmNlVHlwZSk7CiAgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQ
cm92aWRlci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigp
OwogICAgIH0KQEAgLTIwODAsMTAgKzIwOTAsMTAgQEAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50
OF90Piwgc2l6ZV90PiBlbgogICAgIHJldHVybiBlbmNvZGVyLnJlbGVhc2UoKTsKIH0KIAotVW5s
aW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCitVbmxpbmtlZENv
ZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkm
IGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSwgVVJMJiYgc291cmNlVVJMT3Zl
cnJpZGUpCiB7CiAgICAgY29uc3QgYXV0byogY2FjaGVkRW50cnkgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4oYnVmZmVyKTsKLSAgICBEZWNvZGVyIGRlY29kZXIo
dm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAgRGVjb2RlciBkZWNvZGVyKHZtLCBidWZmZXIsIHNpemUs
IFdURk1vdmUoc291cmNlVVJMT3ZlcnJpZGUpKTsKICAgICBzdGQ6OnBhaXI8U291cmNlQ29kZUtl
eSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKICAgICB7CiAgICAgICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuaAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUg
PHd0Zi9VUkwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM0LDEzICszNSwxMyBAQCBjbGFz
cyBTb3VyY2VDb2RlS2V5OwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiAKIHN0ZDo6cGFpcjxN
YWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiwgY29uc3QgU291
cmNlQ29kZUtleSYsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrKik7Ci1VbmxpbmtlZENvZGVCbG9j
ayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCB2
b2lkKiwgc2l6ZV90KTsKK1VubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZN
JiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3QsIFVSTCYmKTsKIAog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ci1VbmxpbmtlZENvZGVC
bG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK1VubGlua2VkQ29kZUJsb2NrVHlw
ZSogZGVjb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25z
dCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSA9IFVS
TCgpKQogewotICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2Rl
Q29kZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUpKTsKKyAgICByZXR1cm4ganNDYXN0
PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGRlY29kZUNvZGVCbG9ja0ltcGwodm0sIGtleSwgYnVm
ZmVyLCBzaXplLCBXVEZNb3ZlKHNvdXJjZVVSTE92ZXJyaWRlKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362365</attachid>
            <date>2019-02-18 20:49:38 -0800</date>
            <delta_ts>2019-02-19 12:25:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>42703</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCk7
CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBA
QAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0
ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNTY3JpcHRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50
ZXJuYWwuaCIKQEAgLTE2Miw5ICsxNjQsOSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9i
YWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKIAogICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2Jh
bE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2
ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKICAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwogCkBAIC0xNzUsNyArMTc3LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3Jp
cHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3Vy
Y2UgPSBbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxl
S2V5XTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBvbGRNb2R1bGVLZXkgPSBzb3VyY2UtPnNvdXJj
ZUNvZGUoKS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKS5zdHJpbmcoKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1bGVLZXkpICE9IG1v
ZHVsZUtleSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZm
ZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93
OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVy
cmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91
bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVm
aW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAg
ICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZl
KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyMjAsMjEgQEAgSlNP
YmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJv
cGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRl
SlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCkKK3sKKyAgICBBU1NF
UlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBbdXJsIGFic29sdXRlU3Ry
aW5nXSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVN
b2R1bGUoZ2xvYmFsRXhlYygpLCBbc2NyaXB0IGpzU291cmNlQ29kZTprZXldLT5zb3VyY2VDb2Rl
KCksIGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBy
ZXN1bHQtPnJlc29sdmUoZ2xvYmFsRXhlYygpLCBwcm9taXNlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRl
ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpTQmFzZVByaXZhdGUuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0OCwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJp
bmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VV
UkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFs
dWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGNvbnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNT
dGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYg
KCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBVTlVTRURfUEFS
QU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBqc1RoaXNPYmplY3QgPSB0b0pTKHRoaXNPYmplY3Qp
OwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVt
YmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNldHMgInRoaXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0
IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1
dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0
cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0cmlu
ZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNlVVJM
U3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFy
dGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKLQogICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gcHJv
ZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29u
OjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIApAQCAt
ODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAg
ICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0IGluIHRoZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBp
bnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAgICAgICAgIGdsb2JhbE9iamVjdC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAtOTAsNiArODEsMjQgQEAgSlNWYWx1ZVJl
ZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIHJldHVybiB0b1JlZihleGVjLCBq
c1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4
dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0
aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/
IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9
IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3Ry
aW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigp
KSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwgZXhlYywg
Y3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlvbik7Cit9CisKIGJvb2wgSlNDaGVja1Nj
cmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5n
UmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIGlmICghY3R4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNz
IEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKworZXh0ZXJuICJDIiBKU1ZhbHVl
UmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0M6OkpTTG9ja0hvbGRlciYsIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkNvbXBsZXRpb24uaCIK
KyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpA
QCAtMTAzLDE3ICsxMDQsNTAgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmlu
ZyAqKQogICAgIHJldHVybiBbc2VsZiBldmFsdWF0ZVNjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVS
TDpuaWxdOwogfQogCi0tIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2Ny
aXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMCitzdGF0aWMgSlNWYWx1ZSAqZXZh
bHVhdGVTY3JpcHQoSlNDb250ZXh0ICpjb250ZXh0LCBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHNv
dXJjZSwgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiB1cmwpCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb25WYWx1ZSA9IG51bGxwdHI7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQtPm1fY29udGV4dCwgc291cmNlLmdldCgpLCBudWxscHRyLCB1cmwuZ2V0
KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAg
ICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFs
dWVdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNv
bnRleHQ6Y29udGV4dF07Cit9CisKKy0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJp
bmcgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3sKICAgICBhdXRv
IHNjcmlwdEpTID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQpOwogICAgIGF1dG8g
c291cmNlVVJMSlMgPSBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKFtzb3VyY2VVUkwgYWJzb2x1
dGVTdHJpbmddKTsKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9j
b250ZXh0LCBzY3JpcHRKUy5nZXQoKSwgbnVsbHB0ciwgc291cmNlVVJMSlMuZ2V0KCksIDAsICZl
eGNlcHRpb25WYWx1ZSk7CisgICAgcmV0dXJuIGV2YWx1YXRlU2NyaXB0KHNlbGYsIHNjcmlwdEpT
LCBzb3VyY2VVUkxKUyk7Cit9CiAKLSAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCi0gICAgICAgIHJl
dHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworLSAo
SlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0IHdpdGhTb3VyY2VV
Ukw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQ
cm9ncmFtKSB7CisgICAgICAgIGF1dG8gdGhlVVJMID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0
ZShbdXJsIGFic29sdXRlU3RyaW5nXSk7IC8vIE9PUFMhCisgICAgICAgIFVOVVNFRF9QQVJBTSh0
aGVVUkwpOworCisgICAgICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IFtzY3JpcHQganNTb3VyY2VD
b2RlXTsKIAotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6c2VsZl07CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2Nv
bnRleHQpOworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25W
YWx1ZSA9IG51bGxwdHI7CisgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNj
cmlwdEludGVybmFsKGxvY2tlciwgZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBqc1NvdXJjZUNv
ZGUtPnNvdXJjZUNvZGUoKSwgJmV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNB
UElHbG9iYWxPYmplY3QqPih2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1By
b21pc2VSZWplY3RlZFdpdGhSZWFzb246W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVz
c2FnZTpAIkNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0
OnNlbGZdIGluQ29udGV4dDpzZWxmXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKHZtLCBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0
TW9kdWxlKHNjcmlwdCwgdXJsKSkgaW5Db250ZXh0OnNlbGZdOwogfQogCiAtICh2b2lkKXNldEV4
Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCkBAIC0zMDAsNiArMzM0LDExIEBAIC0gKEJPT0wpYm9v
bEZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWUKICAgICByZXR1cm4gTk87CiB9CiAKKy0gKEpT
VmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb25XaXRoU3RyaW5nOihTdHJpbmcmKXN0cmlu
ZworeworICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246W0pTVmFsdWUg
dmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpzdHJpbmcgaW5Db250ZXh0OnNlbGZdLkpTVmFs
dWVSZWZdOworfQorCiAtICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRh
ICopY2FsbGJhY2tEYXRhIGNhbGxlZVZhbHVlOihKU1ZhbHVlUmVmKWNhbGxlZVZhbHVlIHRoaXNW
YWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3VtZW50
Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzCiB7CiAgICAgVGhy
ZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsMTYgQEAKIC8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0
IHdpbGwgdXNlIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdh
dGUgd2lsbCBiZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdlYlZpZXcuICov
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+
IG1vZHVsZUxvYWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RC
QSksIGlvcyhKU0NfSU9TX1RCQSkpOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJ1biBh
IEpTU2NyaXB0LgorIEBwYXJhbSBzY3JpcHQgdGhlIEpTU2NyaXB0IHRvIGV2YWx1YXRlLgorIEBk
aXNjdXNzaW9uIElmIHRoZSBwcm92aWRlZCBKU1NjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIEpTU2Ny
aXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4gc3luY2hyb25vdXNseSBhbmQgcmV0
dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90aGVyd2lzZSwgaWYgdGhlIHNjcmlw
dCB3YXMgY3JlYXRlZCB3aXRoIEpTU2NyaXB0VHlwZU1vZHVsZSwgdGhlIG1vZHVsZSB3aWxsIGJl
IHJ1biBhc3luY2hyb25vdXNseSBhbmQgd2lsbCByZXR1cm4gYSBwcm9taXNlIHJlc29sdmVkIHdo
ZW4gdGhlIG1vZHVsZSBhbmQgYW55IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQu
IFRoZSBtb2R1bGUgbG9hZGVyIHdpbGwgdHJlYXQgdGhlIHNjcmlwdCBhcyBpZiBpdCBoYWQgYmVl
biByZXR1cm5lZCBmcm9tIGEgZGVsZWdhdGUgY2FsbCB0byBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSB3
aXRoIGl0cyBpZGVudGVmaWVyIGFzIHVybC4gVGhpcyBtaXJyb3JzIHRoZSBKYXZhU2NyaXB0IGR5
bmFtaWMgaW1wb3J0IG9wZXJhdGlvbi4KKyAqLworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3Jp
cHQ6KEpTU2NyaXB0ICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopdXJsOworCiBAZW5k
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkocmV2aXNp
b24gMjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxOCBAQCBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiBA
Y2xhc3MgSlNWaXJ0dWFsTWFjaGluZTsKIAorLyohCisgQGVudW0gSlNTY3JpcHRUeXBlCisgQGFi
c3RyYWN0ICAgICBBIGNvbnN0YW50IGlkZW50aWZ5aW5nIHRoZSBleGVjdXRpb24gdHlwZSBvZiBh
IEpTU2NyaXB0LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZVByb2dyYW0gIFRoZSB0eXBl
IG9mIGEgbm9ybWFsIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyBAY29uc3RhbnQgICAgIGtKU1Njcmlw
dFR5cGVNb2R1bGUgICBUaGUgdHlwZSBvZiBhIG1vZHVsZSBKYXZhU2NyaXB0IHByb2dyYW0uCisg
Ki8KK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEpTU2NyaXB0VHlwZSkgeworICAgIGtKU1Nj
cmlwdFR5cGVQcm9ncmFtLAorICAgIGtKU1NjcmlwdFR5cGVNb2R1bGUsCit9OworCisKIEpTQ19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKIEBp
bnRlcmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAogCkBAIC00MSw3ICs1Myw3IEBAIEpTQ19DTEFT
U19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwKICBAcGFyYW0gdm0gVGhlIEpTVmlydHVh
bE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgogIEByZXN1bHQgVGhlIG5l
dyBzY3JpcHQuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNl
OihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICop
dm07CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcg
Kilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIEpTQ19BUElf
REVQUkVDQVRFRChtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKIAogLyoh
CiAgQG1ldGhvZApAQCAtNTUsMTMgKzY3LDQ0IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4
KEpTQ19NQUNfVEJBKSwKIAogIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0
aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlw
ZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICop
Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQ
YXRoOwotCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNV
UkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0
aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29k
ZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RFUFJFQ0FURUQobWFj
b3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKIC8qIQogIFRoaXMgaXMgZGVw
cmVjYXRlZCBhbmQgaXMgZXF1aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVh
bE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgogICovCi0rIChudWxs
YWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGlu
VmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51
bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxl
IE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21V
VEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RF
UFJFQ0FURUQobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisKKy8qIQor
IEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQg
dmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291
cmNlLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRoZSBzY3Jp
cHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1h
Y2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBjYWNoZVBhdGgg
QSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBm
dXR1cmUgZXhlY3V0aW9uLgorIEBwYXJhbSBlcnJvciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUg
c2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRoZSByZXN1bHQgaXMgbmlsLgorIEByZXN1
bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRP
ZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGlu
VmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRCeXRlY29kZUNhY2hlOihu
dWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUg
KiBfTnVsbGFibGUpZXJyb3I7CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEg
SlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRv
IGEgY29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2UuCisgQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5p
bmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHZt
IFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KKyBA
cGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNo
b3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlw
dGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVzdWx0
IGlzIG5pbC4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxl
cyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2Rp
ZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gVGhpcyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sg
dGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KKworIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlz
IG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisgKi8KKysgKG51bGxhYmxl
IGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQ
YXRoIGVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKKwor
LyohIEBhYnN0cmFjdCBUaGUgdHlwZSBvZiBzY3JpcHQgcHJvdmlkZWQgZHVyaW5nIGNyZWF0aW9u
LiAqLworQHByb3BlcnR5IChyZWFkb25seSkgSlNTY3JpcHRUeXBlIHR5cGU7CisKKy0gKEJPT0wp
Y2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFi
bGUpZXJyb3I7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
Lm1tCShyZXZpc2lvbiAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTQgQEAKICNpbXBvcnQgIlBhcnNl
ckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBA
aW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAgIF9fd2VhayBKU1ZpcnR1YWxNYWNoaW5lKiBt
X3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0VHlwZSBtX3R5cGU7CisgICAgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3VyY2U7CiAgICAgU3RyaW5nIG1fc291cmNlOwog
ICAgIFJldGFpblB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29k
ZSBtX2NhY2hlZEJ5dGVjb2RlOwpAQCAtMTE2LDYgKzExOSw1MCBAQCArIChpbnN0YW5jZXR5cGUp
c2NyaXB0RnJvbVVURjhGaWxlOihOU1VSCiAgICAgcmV0dXJuIFtKU1NjcmlwdCBzY3JpcHRGcm9t
QVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENvZGVTaWduaW5nOmNv
ZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CiB9CiAKK3N0YXRpYyBK
U1NjcmlwdCAqY3JlYXRlRXJyb3IoTlNTdHJpbmcgKm1lc3NhZ2UsIE5TRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBpZiAoZXJyb3IpCisgICAgICAgICplcnJvciA9IFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpAIkpTU2NyaXB0RXJyb3JEb21haW4iIGNvZGU6MSB1c2VySW5mbzpAeyBAIm1lc3NhZ2Ui
OiBtZXNzYWdlIH1dOworICAgIHJldHVybiBuaWw7Cit9CisKKysgKGluc3RhbmNldHlwZSlzY3Jp
cHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRCeXRlY29kZUNhY2hl
OihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjooTlNFcnJvciAqKillcnJvcgoreworICAgIFVOVVNF
RF9QQVJBTShlcnJvcik7CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07
CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3Vy
Y2U7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlw
ZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1h
Y2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNh
Y2hlUGF0aCBlcnJvcjooTlNFcnJvciAqKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOworICAgIGlm
ICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9y
KFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBwYXRoICVAIGlzIG5vdCBhIGxvY2Fs
IGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxlUGF0aFVSTCldLCBlcnJvcik7CisK
KyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJpbmcgc3lzdGVtUGF0aCA9IGZpbGVQ
YXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEg
ZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0
IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihz
eXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5z
aXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAlQCBhcmUgQVNDSUkuIiwgc3Rh
dGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7CisKKyAgICBKU1Njcmlw
dCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBy
ZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7
CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0
Q29weWluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwg
ZmlsZURhdGEuc2l6ZSgpKSk7CisgICAgcmVzdWx0LT5tX21hcHBlZFNvdXJjZSA9IFdURk1vdmUo
ZmlsZURhdGEpOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jl
c3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxv
YwogewogICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29k
ZS5vd25lZCgpKQpAQCAtMTUyLDIyICsxOTksMTQgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBt
X2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9Owog
fQogCi0tICh2b2lkKXdyaXRlQ2FjaGUKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoo
TlNFcnJvciAqKillcnJvcgogewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAh
bV9jYWNoZVBhdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTQzo6UGFyc2VyRXJyb3IgZXJy
b3I7Ci0gICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZSht
X3ZpcnR1YWxNYWNoaW5lLnZtLCBtX2pzU291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBlcnJvcik7
Ci0gICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBmZCA9
IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwg
MDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHJjID0g
ZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICB3cml0
ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsK
LSAgICBjbG9zZShmZCk7CisgICAgU3RyaW5nIGVycm9yU3RyaW5nIHsgfTsKKyAgICBbc2VsZiB3
cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAoIWVycm9yU3RyaW5nLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gISFjcmVhdGVFcnJvcihlcnJvclN0cmluZywgZXJyb3IpOworIAorICAg
IHJldHVybiBZRVM7CiB9CiAKIEBlbmQKQEAgLTE4OSwxMiArMjI4LDI3IEBAIC0gKGNvbnN0IEpT
Qzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1fY2FjaGVkQnl0ZWNv
ZGU7CiB9CiAKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGUKK3sKKyAgICBBU1NF
UlQobV90eXBlICE9IGtKU1NjcmlwdFR5cGVNb2R1bGUpOworCisgICAgaWYgKG1fanNTb3VyY2VD
b2RlKQorICAgICAgICByZXR1cm4gbV9qc1NvdXJjZUNvZGUuZ2V0KCk7CisKKyAgICBKU0M6OlZN
JiB2bSA9IG1fdmlydHVhbE1hY2hpbmUudm07CisgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24geyB9OworICAgIC8vIE9PUFM6IGZpZ3VyZSBvdXQgVVJML1NvdXJjZU9yaWdpbi4KKyAgICBS
ZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyOjpjcmVhdGUoc2VsZiwgSlNDOjpTb3VyY2VPcmlnaW4oKSwgVVJMKCksIFRleHRQ
b3NpdGlvbiB7IH0sIEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtKTsKKyAg
ICBKU0M6OlNvdXJjZUNvZGUgc291cmNlQ29kZShXVEZNb3ZlKHNvdXJjZVByb3ZpZGVyKSwgc3Rh
cnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5v
bmVCYXNlZEludCgpKTsKKyAgICBKU0M6OkpTU291cmNlQ29kZSoganNTb3VyY2VDb2RlID0gSlND
OjpKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92ZShzb3VyY2VDb2RlKSk7CisgICAgbV9q
c1NvdXJjZUNvZGUuc2V0KHZtLCBqc1NvdXJjZUNvZGUpOworICAgIHJldHVybiBqc1NvdXJjZUNv
ZGU7Cit9CisKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpbW9kdWxlS2V5CiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAg
ICAgIEFTU0VSVChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9q
c1NvdXJjZUNvZGUpCiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKLSAgICB9
CiAKICAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hpbmUudm07CiAgICAgVGV4dFBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24geyB9OwpAQCAtMjAyLDEwICsyNTYsNDAgQEAgLSAoSlNDOjpKU1Nv
dXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29ucwogICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VD
b2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNl
ZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwogICAgIEpTQzo6
SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZt
LCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291cmNlQ29kZS5zZXQodm0sIGpzU291
cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAgICAgcmV0dXJuIGpzU291cmNlQ29k
ZTsKIH0KIAorLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCit7CisKKyAgICBpZiAo
bV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAo
IW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVycm9yID0gIm5vIGNhY2hlIHBhdGggcHJvdmlkZWQi
OworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQYXJzZXJFcnJvciBwYXJz
ZXJFcnJvcjsKKyAgICBhdXRvIGtleSA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92
aXJ0dWFsTWFjaGluZS52bSwgIkFQSSBQbGFjZWhvbGRlciBzdHJpbmciX3MpOworICAgIG1fY2Fj
aGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFsTWFjaGlu
ZS52bSwgW3NlbGYganNTb3VyY2VDb2RlOmtleV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3Ip
OworICAgIGlmIChwYXJzZXJFcnJvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZXJyb3IgPSAidW5h
YmxlIHRvIGdlbmVyYXRlIGNvbXBsZXRlIGJ5dGVjb2RlIjsKKyAgICAgICAgcmV0dXJuIE5POwor
ICAgIH0KKyAgICBpbnQgZmQgPSBvcGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBP
X0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBl
cnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBvcGVuIGZpbGU6ICIsIFttX2NhY2hlUGF0aCBw
YXRoXS5VVEY4U3RyaW5nLCAiIGR1ZSB0byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBM
T0NLX0VYIHwgTE9DS19OQik7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0g
IlVuYWJsZSB0byBsb2NrIHRoZSBjYWNoZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Uu
IjsKKyAgICBlbHNlCisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwg
bV9jYWNoZWRCeXRlY29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJl
dHVybkNvZGU7Cit9CiBAZW5kCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw4IEBAIGNsYXNzIFN0cmluZzsKIC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7CiAtIChj
b25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKIC0gKEpTQzo6SlNTb3Vy
Y2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5Owor
LSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcjsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RJbmNsdWRlcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0JKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIC8vIFNpbmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBh
c3NlZCB0aHJvdWdoIHRoZSByZXdyaXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3Jp
dHRlbiB2YWx1ZXMuLi4KICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQogI2RlZmluZSBK
U0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikKKyNkZWZpbmUgSlNDX0FQSV9ERVBSRUNBVEVEKC4uLikK
ICNkZWZpbmUgSlNDX01BQ19WRVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9U
QkEgMAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwko
cmV2aXNpb24gMjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAKICNlbmRpZgogCiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7Cit2b2lkIHRl
c3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQgdGVzdENBUElWaWFD
cHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODAsMTEgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAor
ICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5VTEw7CiAjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworICAgIHRlc3RP
YmplY3RpdmVDQVBJKGZpbHRlcik7CiAjZW5kaWYKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9
IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5VTEw7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRlc3RDQVBJ
VmlhQ3BwKGZpbHRlcikpOwogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24g
MjQxNzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTQgQEAKICNpbXBvcnQgIlJlZ3Jlc3MxNDEyNzUu
aCIKICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2ltcG9ydCA8bGlicHJvYy5oPgogI2lt
cG9ydCA8cHRocmVhZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZv
b3RwcmludC5oPgogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvRGF0YUxv
Zy5oPgogCisKIGV4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKIGV4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzRWRl
bkNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKIApAQCAtNTQsNyArNTYsNyBAQCBl
eHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUoaWQpCiBleHRlcm4gIkMiIGNvbnN0
IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsKIAogZXh0ZXJuIGludCBmYWlsZWQ7Ci1leHRl
cm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogZXh0ZXJuICJDIiB2b2lkIGNoZWNrUmVzdWx0
KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKQEAgLTE5ODUs
OSArMTk4Nyw5IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKICAgICAgICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKIAotICAg
ICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5q
c1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9
IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7
IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBc
Ii4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0
IGV4cCA9IGZvbzsiOworICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgXCJv
dGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiOworICAgICAgICBO
U1N0cmluZyogYmFyU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBl
eHBvcnQgbGV0IGZvbyA9ICgpID0+IG47IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9
IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhp
cy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAKICAgICAgICAgTlNVUkwq
IGZvb1BhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJm
b28uanMiXTsKICAgICAgICAgTlNVUkwqIGJhclBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXIuanMiXTsKQEAgLTIwMjMsMTIgKzIwMjUsMTQgQEAg
c3RhdGljIHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgICAgICB9CiAKICAgICAgICAgTlNG
aWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxd
OwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmls
XTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5p
bF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVy
cm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQ
YXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6
Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IHRydWU7Cisg
ICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRo
IGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0
ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92
ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6
bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJM
OmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiUmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7
CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIwODIsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0Zp
bGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVM
b2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIwOTMsMTE4IEBAIHN0YXRp
YyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRl
IDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUp
bmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFw
cGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAorewor
ICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilp
ZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0
SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxN
YWNoaW5lIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgaWYgKHNjcmlwdCkK
KyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICBlbHNl
CisgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhO
ZXdFcnJvckZyb21NZXNzYWdlOkAiVW5hYmxlIHRvIGNyZWF0ZSBTY3JpcHQiIGluQ29udGV4dDpj
b250ZXh0XV1dOworfQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElT
VEZEUywgMCwgMCwgMCk7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNv
bnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07
CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAg
ICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4v
YmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAg
ICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRl
eHRdOworICAgICAgICBzaXplX3QgYWZ0ZXJDb3VudCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwg
UFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU1Njcmlw
dCBzaG91bGQgbm90IGhvbGQgYSBmaWxlIGRlc2NyaXB0b3IiLCBjb3VudCA9PSBhZnRlckNvdW50
KTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOwor
ICAgIH0KKyAgICBzaXplX3QgYWZ0ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElE
TElTVEZEUywgMCwgMCwgMCk7CisgICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291
bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRlciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09
IGFmdGVyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRNZW1vcnlN
YXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVM
b2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1Njcmlw
dHMoKV07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBl
OmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp1cmwgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVy
cm9yOm5pbF07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0MSA9IFtjb250ZXh0IGV2YWx1YXRl
SlNTY3JpcHQ6c2NyaXB0IHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9m
b28vYmFyLmpzIl1dOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRo
TnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRl
eHQsIHJlc3VsdDEsIG51bGwpOworCisgICAgICAgIEpTVmFsdWUgKnJlc3VsdDIgPSBbY29udGV4
dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdCB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6QCIvZm9vL2Jhei5qcyJdXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgd2FzUmVqZWN0
ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0Y2giIHdpdGhB
cmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2FzUmVqZWN0ZWQg
PSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgfV1dOworCisgICAgICAgIGNoZWNrUmVzdWx0
KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGggZGlmZmVyZW50IGlkZW50aWZpZXJzIGlz
IHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0KK30KKworI2RlZmluZSBSVU4odGVzdCkg
ZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgXAorICAgICAgICAgICAgYnJl
YWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwgI3Rlc3QpOyBcCisgICAgICAgIHRlc3Q7
IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIsICN0ZXN0KTsgXAorICAgIH0gd2hpbGUg
KGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqIGZpbHRlcikKIHsK
ICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJIik7CiAKLSAgICBjaGVja05lZ2F0
aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKTsKKyAgICBhdXRv
IHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdCkgLT4gYm9vbCB7CisgICAgICAgIGlm
IChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3RyY2FzZXN0cih0ZXN0LCBmaWx0ZXIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgUlVOKGNoZWNrTmVnYXRpdmVOU0lu
dGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkpOworCisgICAgUlVO
KHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0RmV0
Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpKTsKKyAgICBSVU4odGVzdEZl
dGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpKTsK
KyAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGUoKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNB
YnNvbHV0ZVNjcmlwdFVSTCgpOwotICAgIHRlc3RGZXRjaCgpOwotICAgIHRlc3RGZXRjaFdpdGhU
d29DeWNsZSgpOwotICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7Ci0gICAgdGVzdEltcG9y
dE1vZHVsZVR3aWNlKCk7Ci0gICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKKyAgICBSVU4odGVzdExv
YWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzRmFp
bGVkRmV0Y2goKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOwotICAg
IHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKyAgICBSVU4odGVzdEpTU2NyaXB0VVJM
KCkpOwogCiAgICAgLy8gRmlsZSBsb2FkaW5nCi0gICAgdGVzdExvYWRCYXNpY0ZpbGUoKTsKKyAg
ICBSVU4odGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKSk7CisgICAgUlVOKHRlc3RMb2FkQmFz
aWNGaWxlKCkpOwogCi0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZl
RWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIp
OwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpOwotICAg
IHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0TGF0ZSk7Ci0gICAgcHJvbWlz
ZVJlamVjdE9uSlNFeGNlcHRpb24oKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKTsKLSAg
ICBwcm9taXNlQ3JlYXRlUmVqZWN0ZWQoKTsKLSAgICBwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVz
dCgpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdl
cikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdEVhZ2Vy
KSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUp
KTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKSk7
CisgICAgUlVOKHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCkpOworICAgIFJVTihwcm9taXNl
Q3JlYXRlUmVzb2x2ZWQoKSk7CisgICAgUlVOKHByb21pc2VDcmVhdGVSZWplY3RlZCgpKTsKKyAg
ICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKSk7CiAKICAgICB0ZXN0T2JqZWN0aXZl
Q0FQSU1haW4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNDE3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE2MCw2ICsxMTYwLDcgQEAK
IAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdB
ODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTgwQzE2RDFFM0E5
NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1
IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3Ry
dWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5ODcyQzQ4MjIxQkJB
RjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUlu
dGVybmFsLmggKi87IH07CiAJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODkz
Nzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQg
LyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkw
ODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzc3MSw2ICszNzcyLDcgQEAKIAkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0MzkxRjhD
MEFDNzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
cnVjdHVyZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0M0Ex
RjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVj
dHVyZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5ODcyQzQ3MjIxQkJB
RUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NjFEQ0FCNTczMDBG
OEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRml4ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNGaXhlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQQ1RvT3JpZ2luTWFwLmg7IHBhdGggPSBi
My9CM1BDVG9PcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5OTEs
NiArNTk5Myw3IEBACiAJCQkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBl
ck9iamVjdC5tbSAqLywKIAkJCQkxNDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNw
cCAqLywKIAkJCQkxNDI3MTEzODBBNDYwQkJCMDA4MEVFRUEgLyogSlNCYXNlLmggKi8sCisJCQkJ
Nzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi8sCiAJCQkJMTQw
RDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLywKIAkJCQkxNDQwRjhB
RDBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQkx
NDQwRjhBQzBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmggKi8sCkBA
IC05NzUwLDYgKzk3NTMsNyBAQAogCQkJCTBGRjQyNzQ4MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlz
ODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyog
dWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgz
M0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTg3MkM0ODIy
MUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDkgKzIxNSwx
MCBAQCBjbGFzcyBEZWNvZGVyIHsKICAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKIAog
cHVibGljOgotICAgIERlY29kZXIoVk0mIHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6
ZV90IHNpemUpCisgICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBz
aXplX3Qgc2l6ZSwgVVJMJiYgc291cmNlVVJMT3ZlcnJpZGUpCiAgICAgICAgIDogbV92bSh2bSkK
ICAgICAgICAgLCBtX2Jhc2VBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGJhc2VBZGRyZXNzKSkKKyAgICAgICAgLCBtX3NvdXJjZVVSTE92ZXJyaWRlKFdURk1vdmUoc291
cmNlVVJMT3ZlcnJpZGUpKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX3NpemUoc2l6ZSkK
ICNlbmRpZgpAQCAtMjU5LDkgKzI2MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZmluYWxpemVy
cy5hZGQob2Zmc2V0LCBmbik7CiAgICAgfQogCisgICAgY29uc3QgVVJMJiBzb3VyY2VVUkxPdmVy
cmlkZSgpIHsgcmV0dXJuIG1fc291cmNlVVJMT3ZlcnJpZGU7IH0KKwogcHJpdmF0ZToKICAgICBW
TSYgbV92bTsKICAgICBjb25zdCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOworICAgIFVSTCBtX3Nv
dXJjZVVSTE92ZXJyaWRlOwogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3QgbV9zaXplOwogI2Vu
ZGlmCkBAIC0xMzAxLDEwICsxMzA1LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFN0cmlu
ZyBkZWNvZGVkU291cmNlID0gbV9zb3VyY2UuZGVjb2RlKGRlY29kZXIpOwogICAgICAgICBTb3Vy
Y2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9yaWdpbiA9IG1fc291cmNlT3JpZ2luLmRlY29kZShkZWNv
ZGVyKTsKLSAgICAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIFN0cmluZyBkZWNvZGVkVVJMU3RyaW5nID0gbV91cmwuZGVjb2RlKGRlY29kZXIp
OworICAgICAgICBVUkwgc291cmNlVVJMOworICAgICAgICBpZiAoZGVjb2Rlci5zb3VyY2VVUkxP
dmVycmlkZSgpKSB7CisgICAgICAgICAgICBkZWNvZGVkU291cmNlT3JpZ2luID0gU291cmNlT3Jp
Z2luIHsgZGVjb2Rlci5zb3VyY2VVUkxPdmVycmlkZSgpIH07CisgICAgICAgICAgICBzb3VyY2VV
UkwgPSBkZWNvZGVyLnNvdXJjZVVSTE92ZXJyaWRlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc291cmNlVVJMID0gVVJMKFVSTCgpLCBkZWNvZGVkVVJMU3RyaW5nKTsKICAgICAgICAg
VGV4dFBvc2l0aW9uIGRlY29kZWRTdGFydFBvc2l0aW9uID0gbV9zdGFydFBvc2l0aW9uLmRlY29k
ZShkZWNvZGVyKTsKIAotICAgICAgICBSZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyID0gU3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNv
ZGVkU291cmNlT3JpZ2luLCBVUkwoVVJMKCksIGRlY29kZWRVUkwpLCBkZWNvZGVkU3RhcnRQb3Np
dGlvbiwgc291cmNlVHlwZSk7CisgICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2Us
IGRlY29kZWRTb3VyY2VPcmlnaW4sIFdURk1vdmUoc291cmNlVVJMKSwgZGVjb2RlZFN0YXJ0UG9z
aXRpb24sIHNvdXJjZVR5cGUpOwogICAgICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNl
UHJvdmlkZXIuZ2V0KCkpOwogICAgICAgICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYo
KTsKICAgICB9CkBAIC0yMDgwLDEwICsyMDkwLDEwIEBAIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWlu
dDhfdD4sIHNpemVfdD4gZW4KICAgICByZXR1cm4gZW5jb2Rlci5yZWxlYXNlKCk7CiB9CiAKLVVu
bGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNl
Q29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorVW5saW5rZWRD
b2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5
JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUsIFVSTCYmIHNvdXJjZVVSTE92
ZXJyaWRlKQogewogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVy
KHZtLCBidWZmZXIsIHNpemUpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVmZmVyLCBzaXpl
LCBXVEZNb3ZlKHNvdXJjZVVSTE92ZXJyaWRlKSk7CiAgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVL
ZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CiAgICAgewogICAgICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmgJKHJldmlzaW9uIDI0MTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNCwxMyArMzUsMTMgQEAgY2xh
c3MgU291cmNlQ29kZUtleTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogCiBzdGQ6OnBhaXI8
TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNv
dXJjZUNvZGVLZXkmLCBjb25zdCBVbmxpbmtlZENvZGVCbG9jayopOwotVW5saW5rZWRDb2RlQmxv
Y2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qg
dm9pZCosIHNpemVfdCk7CitVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChW
TSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBVUkwmJik7CiAK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgotVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBr
ZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCitVbmxpbmtlZENvZGVCbG9ja1R5
cGUqIGRlY29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29u
c3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSwgVVJMJiYgc291cmNlVVJMT3ZlcnJpZGUgPSBV
UkwoKSkKIHsKLSAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGRlY29k
ZUNvZGVCbG9ja0ltcGwodm0sIGtleSwgYnVmZmVyLCBzaXplKSk7CisgICAgcmV0dXJuIGpzQ2Fz
dDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2RlQmxvY2tJbXBsKHZtLCBrZXksIGJ1
ZmZlciwgc2l6ZSwgV1RGTW92ZShzb3VyY2VVUkxPdmVycmlkZSkpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362414</attachid>
            <date>2019-02-19 12:25:59 -0800</date>
            <delta_ts>2019-02-19 18:01:19 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>52713</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCk7
CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBA
QAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0
ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNTY3JpcHRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50
ZXJuYWwuaCIKQEAgLTE2Miw5ICsxNjQsOSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9i
YWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKIAogICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2Jh
bE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2
ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKICAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwogCkBAIC0xNzUsNyArMTc3LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3Jp
cHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3Vy
Y2UgPSBbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxl
S2V5XTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBvbGRNb2R1bGVLZXkgPSBzb3VyY2UtPnNvdXJj
ZUNvZGUoKS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKS5zdHJpbmcoKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBvbGRNb2R1bGVLZXkpICE9IG1v
ZHVsZUtleSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZm
ZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93
OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVy
cmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91
bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVm
aW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAg
ICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZl
KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyMjAsMjEgQEAgSlNP
YmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJv
cGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRl
SlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCwgTlNVUkwgKnVybCkKK3sKKyAgICBBU1NF
UlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBhdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBbdXJsIGFic29sdXRlU3Ry
aW5nXSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVN
b2R1bGUoZ2xvYmFsRXhlYygpLCBbc2NyaXB0IGpzU291cmNlQ29kZTprZXldLT5zb3VyY2VDb2Rl
KCksIGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBy
ZXN1bHQtPnJlc29sdmUoZ2xvYmFsRXhlYygpLCBwcm9taXNlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRl
ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpTQmFzZVByaXZhdGUuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0OCwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJp
bmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VV
UkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFs
dWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGNvbnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNT
dGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYg
KCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBVTlVTRURfUEFS
QU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBqc1RoaXNPYmplY3QgPSB0b0pTKHRoaXNPYmplY3Qp
OwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVt
YmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNldHMgInRoaXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0
IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1
dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0
cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0cmlu
ZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNlVVJM
U3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFy
dGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKLQogICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gcHJv
ZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29u
OjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIApAQCAt
ODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAg
ICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0IGluIHRoZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBp
bnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAgICAgICAgIGdsb2JhbE9iamVjdC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKICNlbmRpZgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAtOTAsNiArODEsMjQgQEAgSlNWYWx1ZVJl
ZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIHJldHVybiB0b1JlZihleGVjLCBq
c1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4
dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0
aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/
IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9
IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3Ry
aW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigp
KSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwgZXhlYywg
Y3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlvbik7Cit9CisKIGJvb2wgSlNDaGVja1Nj
cmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5n
UmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIGlmICghY3R4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNz
IEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKworZXh0ZXJuICJDIiBKU1ZhbHVl
UmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0M6OkpTTG9ja0hvbGRlciYsIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkNvbXBsZXRpb24uaCIK
KyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpA
QCAtMTAzLDE3ICsxMDQsNTAgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmlu
ZyAqKQogICAgIHJldHVybiBbc2VsZiBldmFsdWF0ZVNjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVS
TDpuaWxdOwogfQogCi0tIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2Ny
aXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMCitzdGF0aWMgSlNWYWx1ZSAqZXZh
bHVhdGVTY3JpcHQoSlNDb250ZXh0ICpjb250ZXh0LCBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHNv
dXJjZSwgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiB1cmwpCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb25WYWx1ZSA9IG51bGxwdHI7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQtPm1fY29udGV4dCwgc291cmNlLmdldCgpLCBudWxscHRyLCB1cmwuZ2V0
KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAg
ICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFs
dWVdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNv
bnRleHQ6Y29udGV4dF07Cit9CisKKy0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJp
bmcgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3sKICAgICBhdXRv
IHNjcmlwdEpTID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQpOwogICAgIGF1dG8g
c291cmNlVVJMSlMgPSBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKFtzb3VyY2VVUkwgYWJzb2x1
dGVTdHJpbmddKTsKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9j
b250ZXh0LCBzY3JpcHRKUy5nZXQoKSwgbnVsbHB0ciwgc291cmNlVVJMSlMuZ2V0KCksIDAsICZl
eGNlcHRpb25WYWx1ZSk7CisgICAgcmV0dXJuIGV2YWx1YXRlU2NyaXB0KHNlbGYsIHNjcmlwdEpT
LCBzb3VyY2VVUkxKUyk7Cit9CiAKLSAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCi0gICAgICAgIHJl
dHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworLSAo
SlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0IHdpdGhTb3VyY2VV
Ukw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQ
cm9ncmFtKSB7CisgICAgICAgIGF1dG8gdGhlVVJMID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0
ZShbdXJsIGFic29sdXRlU3RyaW5nXSk7IC8vIE9PUFMhCisgICAgICAgIFVOVVNFRF9QQVJBTSh0
aGVVUkwpOworCisgICAgICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IFtzY3JpcHQganNTb3VyY2VD
b2RlXTsKIAotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6c2VsZl07CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2Nv
bnRleHQpOworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25W
YWx1ZSA9IG51bGxwdHI7CisgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNj
cmlwdEludGVybmFsKGxvY2tlciwgZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBqc1NvdXJjZUNv
ZGUtPnNvdXJjZUNvZGUoKSwgJmV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNB
UElHbG9iYWxPYmplY3QqPih2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1By
b21pc2VSZWplY3RlZFdpdGhSZWFzb246W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVz
c2FnZTpAIkNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0
OnNlbGZdIGluQ29udGV4dDpzZWxmXTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKHZtLCBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0
TW9kdWxlKHNjcmlwdCwgdXJsKSkgaW5Db250ZXh0OnNlbGZdOwogfQogCiAtICh2b2lkKXNldEV4
Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCkBAIC0zMDAsNiArMzM0LDExIEBAIC0gKEJPT0wpYm9v
bEZyb21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWUKICAgICByZXR1cm4gTk87CiB9CiAKKy0gKEpT
VmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb25XaXRoU3RyaW5nOihTdHJpbmcmKXN0cmlu
ZworeworICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246W0pTVmFsdWUg
dmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpzdHJpbmcgaW5Db250ZXh0OnNlbGZdLkpTVmFs
dWVSZWZdOworfQorCiAtICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRh
ICopY2FsbGJhY2tEYXRhIGNhbGxlZVZhbHVlOihKU1ZhbHVlUmVmKWNhbGxlZVZhbHVlIHRoaXNW
YWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3VtZW50
Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzCiB7CiAgICAgVGhy
ZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsMTYgQEAKIC8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0
IHdpbGwgdXNlIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdh
dGUgd2lsbCBiZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdlYlZpZXcuICov
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+
IG1vZHVsZUxvYWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RC
QSksIGlvcyhKU0NfSU9TX1RCQSkpOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJ1biBh
IEpTU2NyaXB0LgorIEBwYXJhbSBzY3JpcHQgdGhlIEpTU2NyaXB0IHRvIGV2YWx1YXRlLgorIEBk
aXNjdXNzaW9uIElmIHRoZSBwcm92aWRlZCBKU1NjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIEpTU2Ny
aXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4gc3luY2hyb25vdXNseSBhbmQgcmV0
dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90aGVyd2lzZSwgaWYgdGhlIHNjcmlw
dCB3YXMgY3JlYXRlZCB3aXRoIEpTU2NyaXB0VHlwZU1vZHVsZSwgdGhlIG1vZHVsZSB3aWxsIGJl
IHJ1biBhc3luY2hyb25vdXNseSBhbmQgd2lsbCByZXR1cm4gYSBwcm9taXNlIHJlc29sdmVkIHdo
ZW4gdGhlIG1vZHVsZSBhbmQgYW55IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQu
IFRoZSBtb2R1bGUgbG9hZGVyIHdpbGwgdHJlYXQgdGhlIHNjcmlwdCBhcyBpZiBpdCBoYWQgYmVl
biByZXR1cm5lZCBmcm9tIGEgZGVsZWdhdGUgY2FsbCB0byBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSB3
aXRoIGl0cyBpZGVudGVmaWVyIGFzIHVybC4gVGhpcyBtaXJyb3JzIHRoZSBKYXZhU2NyaXB0IGR5
bmFtaWMgaW1wb3J0IG9wZXJhdGlvbi4KKyAqLworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3Jp
cHQ6KEpTU2NyaXB0ICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopdXJsOworCiBAZW5k
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkocmV2aXNp
b24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxOCBAQCBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiBA
Y2xhc3MgSlNWaXJ0dWFsTWFjaGluZTsKIAorLyohCisgQGVudW0gSlNTY3JpcHRUeXBlCisgQGFi
c3RyYWN0ICAgICBBIGNvbnN0YW50IGlkZW50aWZ5aW5nIHRoZSBleGVjdXRpb24gdHlwZSBvZiBh
IEpTU2NyaXB0LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZVByb2dyYW0gIFRoZSB0eXBl
IG9mIGEgbm9ybWFsIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyBAY29uc3RhbnQgICAgIGtKU1Njcmlw
dFR5cGVNb2R1bGUgICBUaGUgdHlwZSBvZiBhIG1vZHVsZSBKYXZhU2NyaXB0IHByb2dyYW0uCisg
Ki8KK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEpTU2NyaXB0VHlwZSkgeworICAgIGtKU1Nj
cmlwdFR5cGVQcm9ncmFtLAorICAgIGtKU1NjcmlwdFR5cGVNb2R1bGUsCit9OworCisKIEpTQ19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKIEBp
bnRlcmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAogCkBAIC00MSw3ICs1Myw3IEBAIEpTQ19DTEFT
U19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwKICBAcGFyYW0gdm0gVGhlIEpTVmlydHVh
bE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgogIEByZXN1bHQgVGhlIG5l
dyBzY3JpcHQuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNl
OihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICop
dm07CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcg
Kilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIC8qSlNDX0FQ
SV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpKi87CiAK
IC8qIQogIEBtZXRob2QKQEAgLTU1LDEzICs2Nyw0NCBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1h
Y29zeChKU0NfTUFDX1RCQSksCiAKICBJZiB0aGUgZmlsZSBhdCBmaWxlUGF0aCBpcyBub3QgYXNj
aWkgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbmlsLgogICovCi0rIChudWxsYWJsZSBpbnN0YW5j
ZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VS
TCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNh
Y2hlUGF0aDsKLQorKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6
KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZt
IHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0
ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggLypKU0NfQVBJX0RFUFJFQ0FU
RUQobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkqLzsKIAogLyohCiAgVGhp
cyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFsZW50IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6
aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTouCiAgKi8K
LSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmls
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2ln
bmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToo
bnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2Ny
aXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNp
Z25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIC8q
SlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkp
Ki87CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRo
ZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEph
dmFTY3JpcHQgc291cmNlLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3
aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gdm0gVGhl
IEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJh
bSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxk
IGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJhbSBlcnJvciBBIGRlc2NyaXB0aW9u
IG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRoZSByZXN1bHQgaXMg
bmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNl
dHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5n
ICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRCeXRl
Y29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3Ig
KiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJh
Y3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdp
dGggYSBwYXRoIHRvIGEgY29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFt
IHR5cGUgVGhlIHR5cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2UuCisgQHBhcmFtIGZpbGVQYXRoIEEg
VVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2su
CisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1
YXRlZCBpbi4KKyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hl
cmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZXJy
b3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBp
ZiB0aGUgcmVzdWx0IGlzIG5pbC4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNz
aW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0
ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gVGhpcyBtZXRob2Qgd2ls
bCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KKworIElmIHRoZSBmaWxlIGF0
IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisgKi8K
KysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBl
IG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5T
VVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJs
ZSllcnJvcjsKKworLyohIEBhYnN0cmFjdCBUaGUgdHlwZSBvZiBzY3JpcHQgcHJvdmlkZWQgZHVy
aW5nIGNyZWF0aW9uLiAqLworQHByb3BlcnR5IChyZWFkb25seSkgSlNTY3JpcHRUeXBlIHR5cGU7
CisKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFi
bGUgKiBfTnVsbGFibGUpZXJyb3I7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0Lm1tCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTQgQEAKICNp
bXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAgIF9fd2VhayBKU1ZpcnR1
YWxNYWNoaW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0VHlwZSBtX3R5cGU7Cisg
ICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3VyY2U7CiAgICAgU3RyaW5n
IG1fc291cmNlOwogICAgIFJldGFpblB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpD
YWNoZWRCeXRlY29kZSBtX2NhY2hlZEJ5dGVjb2RlOwpAQCAtMTE2LDYgKzExOSw1MSBAQCArIChp
bnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSCiAgICAgcmV0dXJuIFtKU1Njcmlw
dCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENv
ZGVTaWduaW5nOmNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CiB9
CiAKK3N0YXRpYyBKU1NjcmlwdCAqY3JlYXRlRXJyb3IoTlNTdHJpbmcgKm1lc3NhZ2UsIE5TRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IpCisgICAgICAgICplcnJvciA9IFtOU0Vycm9y
IGVycm9yV2l0aERvbWFpbjpAIkpTU2NyaXB0RXJyb3JEb21haW4iIGNvZGU6MSB1c2VySW5mbzpA
eyBAIm1lc3NhZ2UiOiBtZXNzYWdlIH1dOworICAgIHJldHVybiBuaWw7Cit9CisKKysgKGluc3Rh
bmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIHdpdGhTb3VyY2U6KE5TU3Ry
aW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBhbmRC
eXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjooTlNFcnJvciAqKillcnJvcgor
eworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pT
U2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxN
YWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9z
b3VyY2UgPSBzb3VyY2U7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAg
ICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KE5TRXJy
b3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFVSTCBmaWxlUGF0
aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKKyAgICBpZiAoIWZpbGVQYXRoVVJMLmlzTG9j
YWxGaWxlKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkZpbGUgcGF0aCAlQCBpcyBub3QgYSBsb2NhbCBmaWxlIiwgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oZmlsZVBhdGhVUkwpXSwgZXJyb3IpOworCisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisgICAgU3RyaW5nIHN5c3RlbVBhdGggPSBmaWxlUGF0aFVSTC5maWxlU3lzdGVtUGF0
aCgpOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIGZpbGVEYXRhKHN5c3RlbVBhdGgs
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9y
KFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBhdCBwYXRoICVAIGNvdWxkIG5vdCBi
ZSBtYXBwZWQuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7
CisKKyAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTm90IGFsbCBjaGFy
YWN0ZXJzIGluIGZpbGUgYXQgJUAgYXJlIEFTQ0lJLiIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+
KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2Ny
aXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lzZV9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7CisgICAg
cmVzdWx0LT5tX21hcHBlZFNvdXJjZSA9IFdURk1vdmUoZmlsZURhdGEpOworICAgIHJlc3VsdC0+
bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChtX2NhY2hlZEJ5
dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQpAQCAtMTUyLDIyICsy
MDAsMTQgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpD
YWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OwogfQogCi0tICh2b2lkKXdyaXRlQ2FjaGUK
Ky0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAg
IGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAhbV9jYWNoZVBhdGgpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEpTQzo6UGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgbV9jYWNoZWRCeXRlY29k
ZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBtX2pz
U291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBlcnJvcik7Ci0gICAgaWYgKGVycm9yLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhd
LlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0x
KQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NL
X05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICB3cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5k
YXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7CisgICAgU3Ry
aW5nIGVycm9yU3RyaW5nIHsgfTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsK
KyAgICBpZiAoIWVycm9yU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gISFjcmVhdGVF
cnJvcihlcnJvclN0cmluZywgZXJyb3IpOworIAorICAgIHJldHVybiBZRVM7CiB9CiAKIEBlbmQK
QEAgLTE4OSwyMyArMjI5LDgwIEBAIC0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hl
ZEJ5dGUKICAgICByZXR1cm4gJm1fY2FjaGVkQnl0ZWNvZGU7CiB9CiAKKy0gKEpTQzo6SlNTb3Vy
Y2VDb2RlKilqc1NvdXJjZUNvZGUKK3sKKyAgICBBU1NFUlQobV90eXBlICE9IGtKU1NjcmlwdFR5
cGVNb2R1bGUpOworCisgICAgaWYgKG1fanNTb3VyY2VDb2RlKQorICAgICAgICByZXR1cm4gbV9q
c1NvdXJjZUNvZGUuZ2V0KCk7CisKKyAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hpbmUu
dm07CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIFRleHRQb3NpdGlv
biBzdGFydFBvc2l0aW9uIHsgfTsKKyAgICAvLyBPT1BTOiBmaWd1cmUgb3V0IFVSTC9Tb3VyY2VP
cmlnaW4uCisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0g
SlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3JpZ2luKCks
IFVSTCgpLCBUZXh0UG9zaXRpb24geyB9LCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
UHJvZ3JhbSk7CisgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQ
cm92aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRp
b24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CisgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291
cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29k
ZSkpOworICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2RlKTsKKyAgICByZXR1
cm4ganNTb3VyY2VDb2RlOworfQorCiAtIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2Rl
Oihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleQogewotICAgIGlmIChtX2pzU291cmNl
Q29kZSkgewotICAgICAgICBBU1NFUlQobW9kdWxlS2V5LmltcGwoKSA9PSBtX21vZHVsZUtleSk7
CisgICAgaWYgKG1fanNTb3VyY2VDb2RlKQogICAgICAgICByZXR1cm4gbV9qc1NvdXJjZUNvZGUu
Z2V0KCk7Ci0gICAgfQogCiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiB7IH07CiAgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNl
T3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSks
IFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsK
ICAgICBKU0M6OlNvdXJjZUNvZGUgc291cmNlQ29kZShXVEZNb3ZlKHNvdXJjZVByb3ZpZGVyKSwg
c3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVt
bi5vbmVCYXNlZEludCgpKTsKICAgICBKU0M6OkpTU291cmNlQ29kZSoganNTb3VyY2VDb2RlID0g
SlNDOjpKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92ZShzb3VyY2VDb2RlKSk7CiAgICAg
bV9qc1NvdXJjZUNvZGUuc2V0KHZtLCBqc1NvdXJjZUNvZGUpOwotICAgIFtzZWxmIHdyaXRlQ2Fj
aGVdOwogICAgIHJldHVybiBqc1NvdXJjZUNvZGU7CiB9CiAKKy0gKEJPT0wpd3JpdGVDYWNoZToo
U3RyaW5nJillcnJvcgoreworICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSkgeworICAg
ICAgICBkYXRhTG9nTG4oIkFscmVhZHkgaGF2ZSBjYWNoZWQgYnl0ZWNvZGUhIik7CisgICAgICAg
IHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBl
cnJvciA9ICJubyBjYWNoZSBwYXRoIHByb3ZpZGVkIjsKKyAgICAgICAgcmV0dXJuIE5POworICAg
IH0KKworICAgIEpTQzo6UGFyc2VyRXJyb3IgcGFyc2VyRXJyb3I7CisgICAgaWYgKG1fdHlwZSA9
PSBrSlNTY3JpcHRUeXBlTW9kdWxlKSB7CisgICAgICAgIGF1dG8ga2V5ID0gSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZtX3ZpcnR1YWxNYWNoaW5lLnZtLCAiQVBJIFBsYWNlaG9sZGVyIHN0
cmluZyJfcyk7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxl
Qnl0ZWNvZGUobV92aXJ0dWFsTWFjaGluZS52bSwgW3NlbGYganNTb3VyY2VDb2RlOmtleV0tPnNv
dXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dyYW0pOworICAgICAgICBtX2NhY2hlZEJ5dGVjb2Rl
ID0gSlNDOjpnZW5lcmF0ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291
cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgIH0KKyAgICBpZiAocGFy
c2VyRXJyb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSB7IH07Cisg
ICAgICAgIGVycm9yID0gInVuYWJsZSB0byBnZW5lcmF0ZSBjb21wbGV0ZSBieXRlY29kZSI7Cisg
ICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGgg
cGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICBpZiAoZmQg
PT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxl
OiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaW50IHJldHVy
bkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgIGlmIChyZXR1cm5Db2Rl
KQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9jayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5
IGFscmVhZHkgYmUgaW4gdXNlLiI7CisgICAgZWxzZQorICAgICAgICB3cml0ZShmZCwgbV9jYWNo
ZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICBkYXRhTG9n
TG4oIldyb3RlIGNhY2hlZCBieXRlY29kZSEiKTsKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJu
ICFyZXR1cm5Db2RlOworfQogQGVuZAogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsOCBAQCBjbGFzcyBTdHJpbmc7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwog
LSAoY29uc3QgSlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7CiAtIChKU0M6OkpT
U291cmNlQ29kZSopanNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtl
eTsKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU7CistIChCT09MKXdyaXRlQ2Fj
aGU6KFN0cmluZyYpZXJyb3I7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbQkocmV2aXNpb24gMjQxNzY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0MiwxMCBAQCBTdHJpbmdWaWV3IEpTU2NyaXB0U291
cmNlUHJvdmlkZXI6OnNvdXJjCiAKIGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqIEpTU2NyaXB0
U291cmNlUHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21f
c2NyaXB0LmdldCgpIGNhY2hlZEJ5dGVjb2RlXTsKKyAgICBhdXRvKiByZXN1bHQgPSBbbV9zY3Jp
cHQuZ2V0KCkgY2FjaGVkQnl0ZWNvZGVdOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIGRhdGFM
b2dMbigicmV0dXJuaW5nIG5vbi1udWxsIGNhY2hlZCBieXRlY29kZSEiKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkocmV2aXNpb24g
MjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMu
bQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogLy8gU2luY2Ugd2UgaW5jbHVkZSBm
aWxlcyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRocm91Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8g
aGFuZGxlIHRoZSBub24tcmV3cml0dGVuIHZhbHVlcy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlM
QUJMRSguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0Nf
QVBJX0RFUFJFQ0FURUQoLi4uKQogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZp
bmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogI2VuZGlm
CiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwxMSAr
MTM4MCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNldEVycm9y
TW9kZSgwKTsKICNlbmRpZgogCisgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBh
cmd2WzFdIDogTlVMTDsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHRlc3RPYmplY3Rp
dmVDQVBJKCk7CisgICAgdGVzdE9iamVjdGl2ZUNBUEkoZmlsdGVyKTsKICNlbmRpZgogCi0gICAg
Y29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICAgICBSRUxF
QVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmlsdGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAg
ICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLm1tCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxNCBAQAogI2lt
cG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCisjaW1w
b3J0IDxsaWJwcm9jLmg+CiAjaW1wb3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAj
aW1wb3J0IDx3dGYvTWVtb3J5Rm9vdHByaW50Lmg+CiAjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4K
ICNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+CiAKKwogZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25v
dXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogZXh0ZXJuICJDIiB2
b2lkIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwog
CkBAIC01NCw3ICs1Niw3IEBAIGV4dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFzX3NpZ25hdHVyZShp
ZCkKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQpOwogCiBleHRl
cm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsK
K2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7CiBleHRlcm4g
IkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKiwgYm9vbCk7CiAKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRApAQCAtMTk4NSw5ICsxOTg3LDkgQEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVjb2Rl
Q2FjaGUoKQogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBOU1VSTCogdGVtcERpcmVj
dG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBpc0Rp
cmVjdG9yeTpZRVNdOwogCi0gICAgICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCB7
IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZm9vID0gbjsiOwotICAgICAgICBO
U1N0cmluZyogYmFyU291cmNlID0gQCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsg
ZXhwb3J0IGxldCBuID0gbnVsbDsiOwotICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0gQCJp
bXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJh
biA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vOyI7CisgICAgICAgIE5TU3RyaW5nKiBmb29T
b3VyY2UgPSBAImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4g
PSBudWxsOyI7CisgICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCB7IG4gfSBm
cm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBO
U1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5
L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7
IjsKIAogICAgICAgICBOU1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAImZvby5qcyJdOwogICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0
ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwpAQCAt
MjAyMywxMiArMjAyNSwxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAgICAg
ICAgIH0KIAogICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpmb29QYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6YmFyUGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgQk9PTCBy
ZW1vdmVkQWxsID0gdHJ1ZTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAg
cmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6
bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJM
OmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJl
bW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJy
b3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNy
ZWF0ZWQiLCByZW1vdmVkQWxsKTsKICAgICB9CiB9CiAKQEAgLTIwNzgsNyArMjA4Miw3IEBAIC0g
KHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXQKIAogQGVuZAogCi1zdGF0aWMg
dm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZUxl
Z2FjeVNQSSgpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gKmNvbnRl
eHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOwpAQCAtMjA4OSwz
NCArMjA5MywxMTggQEAgc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQogICAgIH0KIH0K
IAotdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCisKK0BpbnRlcmZhY2UgSlNDb250ZXh0TWVtb3J5
TWFwcGVkTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+
CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNl
dHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRNZW1vcnlN
YXBwZWRMb2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRl
bnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVl
ICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNV
UkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmdd
XTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5
cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmls
XTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRl
IFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQg
dGVzdExvYWRCYXNpY0ZpbGUoKQoreworICAgIHNpemVfdCBjb3VudCA9IHByb2NfcGlkaW5mbyhn
ZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJE
ZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0
ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAImltcG9ydCgnLi9iYXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0
aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJv
Y19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBj
aGVja1Jlc3VsdChAIkpTU2NyaXB0IHNob3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIs
IGNvdW50ID09IGFmdGVyQ291bnQpOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4
dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorICAgIHNpemVfdCBhZnRlciA9IHByb2NfcGlkaW5m
byhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAgICBjaGVja1Jlc3VsdChA
IkZpbGUgZGVzY3JpcHRvciBjb3VudCBzaG9sdWRuJ3QgY2hhbmdlIGFmdGVyIGNvbnRleHQgaXMg
ZGVhbGxvY2VkIiwgY291bnQgPT0gYWZ0ZXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNTY3Jp
cHRVUkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0
ID0gW0pTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAg
ICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgTlNV
UkwgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiLi9iYXNpYy5qcyIgcmVsYXRpdmVUb1VS
TDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtK
U1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9t
QVNDSUlGaWxlOnVybCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQx
ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQgd2l0aFNvdXJjZVVSTDpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOkAiL2Zvby9iYXIuanMiXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwg
PSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVj
a01vZHVsZUNvZGVSYW4oY29udGV4dCwgcmVzdWx0MSwgbnVsbCk7CisKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0MiA9IFtjb250ZXh0IGV2YWx1YXRlSlNTY3JpcHQ6c2NyaXB0IHdpdGhTb3VyY2VV
Ukw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9mb28vYmF6LmpzIl1dOworCisgICAgICAgIF9f
YmxvY2sgYm9vbCB3YXNSZWplY3RlZCA9IGZhbHNlOworICAgICAgICBbcmVzdWx0MiBpbnZva2VN
ZXRob2Q6QCJjYXRjaCIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqcmVhc29uKSB7CisgICAg
ICAgICAgICB3YXNSZWplY3RlZCA9IFtyZWFzb24gaXNPYmplY3RdOworICAgICAgICB9XV07CisK
KyAgICAgICAgY2hlY2tSZXN1bHQoQCJNb2R1bGUgSlNTY3JpcHQgaW1wb3J0ZWQgd2l0aCBkaWZm
ZXJlbnQgaWRlbnRpZmllcnMgaXMgcmVqZWN0ZWQiLCB3YXNSZWplY3RlZCk7CisgICAgfQorfQor
CisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7IFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3Qp
KSBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICBOU0xvZyhAIiVzLi4uXG4iLCAjdGVz
dCk7IFwKKyAgICAgICAgdGVzdDsgXAorICAgICAgICBOU0xvZyhAIiVzOiBkb25lLlxuIiwgI3Rl
c3QpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29u
c3QgY2hhciogZmlsdGVyKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEki
KTsKIAotICAgIGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCk7Ci0gICAgcnVuSklUVGhyZWFkTGlt
aXRUZXN0cygpOworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0KSAt
PiBib29sIHsKKyAgICAgICAgaWYgKGZpbHRlcikKKyAgICAgICAgICAgIHJldHVybiBzdHJjYXNl
c3RyKHRlc3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBS
VU4oY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKSk7CisgICAgUlVOKHJ1bkpJVFRocmVhZExpbWl0
VGVzdHMoKSk7CisKKyAgICBSVU4odGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwo
KSk7CisgICAgUlVOKHRlc3RGZXRjaCgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFR3b0N5Y2xl
KCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpKTsKKyAgICBSVU4odGVzdElt
cG9ydE1vZHVsZVR3aWNlKCkpOworICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZSgpKTsKIAotICAg
IHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKCk7Ci0gICAgdGVzdEZldGNoKCk7
Ci0gICAgdGVzdEZldGNoV2l0aFR3b0N5Y2xlKCk7Ci0gICAgdGVzdEZldGNoV2l0aFRocmVlQ3lj
bGUoKTsKLSAgICB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKTsKLSAgICB0ZXN0Qnl0ZWNvZGVDYWNo
ZSgpOworICAgIFJVTih0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpKTsKKyAgICBSVU4o
dGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpKTsKIAotICAgIHRlc3RMb2FkZXJSZWplY3Rz
TmlsU2NyaXB0VVJMKCk7Ci0gICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOworICAg
IFJVTih0ZXN0SlNTY3JpcHRVUkwoKSk7CiAKICAgICAvLyBGaWxlIGxvYWRpbmcKLSAgICB0ZXN0
TG9hZEJhc2ljRmlsZSgpOworICAgIFJVTih0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpKTsK
KyAgICBSVU4odGVzdExvYWRCYXNpY0ZpbGUoKSk7CiAKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9y
KFJlc29sdXRpb246OlJlc29sdmVFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNv
bHV0aW9uOjpSZWplY3RFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZXNvbHZlTGF0ZSk7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWpl
Y3RMYXRlKTsKLSAgICBwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VD
cmVhdGVSZXNvbHZlZCgpOwotICAgIHByb21pc2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFs
bGVsUHJvbWlzZVJlc29sdmVUZXN0KCk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVz
b2x1dGlvbjo6UmVzb2x2ZUVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVz
b2x1dGlvbjo6UmVqZWN0RWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNv
bHV0aW9uOjpSZXNvbHZlTGF0ZSkpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlamVjdExhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24o
KSk7CisgICAgUlVOKHByb21pc2VDcmVhdGVSZXNvbHZlZCgpKTsKKyAgICBSVU4ocHJvbWlzZUNy
ZWF0ZVJlamVjdGVkKCkpOworICAgIFJVTihwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpKTsK
IAogICAgIHRlc3RPYmplY3RpdmVDQVBJTWFpbigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYwLDYgKzExNjAsNyBAQAogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJl
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTgw
QzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5ODY5NDNCMUY4
QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVj
dHVyZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVE
MDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzk4OTM3NzkxRENBQjU3MzAw
RjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5OUVG
N0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAv
KiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTA5MDdFMUQ3
Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzcxLDYgKzM3NzIsNyBAQAogCQk3OTgwQzE2QjFF
M0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7IHBhdGgg
PSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIz
UENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9P
cmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTk5MSw2ICs1OTkzLDcgQEAKIAkJCQlDMkNGMzlCRjE2RTE1QTgxMDBE
RDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYw
MEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4MEE0NjBCQkIwMDgwRUVFQSAv
KiBKU0Jhc2UuaCAqLywKKwkJCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50
ZXJuYWwuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0
ZS5oICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNr
Q29uc3RydWN0b3IuaCAqLywKQEAgLTk3NTAsNiArOTc1Myw3IEBACiAJCQkJMEZGNDI3NDgxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5
MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2
V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MjE3QURCNUYzMDA1QUIx
NzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmgJKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyAr
MTkxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFO
b2RlKiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2Ny
aXB0TW9kZSwgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUsICBKU0M6OkRlcml2ZWRDb250ZXh0
VHlwZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7Ci0gICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBjb25z
dCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZShEZWNvZGVyJiwgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUsIGNvbnN0IENhY2hlZEZ1
bmN0aW9uRXhlY3V0YWJsZSYpOwogCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAg
ICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjQxNzY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSw2ICsxMjUsOSBAQCBwcml2YXRlOgogY2xhc3MgQ29tcGFjdFZhcmlh
YmxlRW52aXJvbm1lbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KTsKKworICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudDsKKwogcHVibGljOgogICAg
IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKTsK
ICAgICBWYXJpYWJsZUVudmlyb25tZW50IHRvVmFyaWFibGVFbnZpcm9ubWVudCgpIGNvbnN0OwpA
QCAtMTMzLDYgKzEzNiw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNoOyB9CiAKIHByaXZhdGU6CisgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1l
bnQoKSA9IGRlZmF1bHQ7CisKICAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4g
bV92YXJpYWJsZXM7CiAgICAgVmVjdG9yPFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeT4gbV92YXJp
YWJsZU1ldGFkYXRhOwogICAgIHVuc2lnbmVkIG1faGFzaDsKQEAgLTE3NCw2ICsxNzksOCBAQCBz
dHJ1Y3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5IHsKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIENhY2hlZENvbXBhY3RWYXJpYWJsZU1hcEtleTsKKwogICAgIENvbXBhY3RWYXJp
YWJsZUVudmlyb25tZW50KiBtX2Vudmlyb25tZW50OwogfTsKIApAQCAtMjAyLDggKzIwOSwxMiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6Q29tcGFjCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29tcGFjdFZhcmlhYmxlTWFwIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGFj
dFZhcmlhYmxlTWFwPiB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZENvbXBhY3RWYXJpYWJsZU1h
cDsKKwogcHVibGljOgogICAgIGNsYXNzIEhhbmRsZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRDb21wYWN0VmFyaWFibGVNYXBIYW5kbGU7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEhh
bmRsZSgpID0gZGVmYXVsdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOSAr
MjE1LDEwIEBAIGNsYXNzIERlY29kZXIgewogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9O
OwogCiBwdWJsaWM6Ci0gICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNz
LCBzaXplX3Qgc2l6ZSkKKyAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJl
c3MsIHNpemVfdCBzaXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSkKICAgICAgICAgOiBtX3Zt
KHZtKQogICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oYmFzZUFkZHJlc3MpKQorICAgICAgICAsIG1fc291cmNlVVJMT3ZlcnJpZGUoV1RGTW92
ZShzb3VyY2VVUkxPdmVycmlkZSkpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fc2l6ZShz
aXplKQogI2VuZGlmCkBAIC0yNTksOSArMjYwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9maW5h
bGl6ZXJzLmFkZChvZmZzZXQsIGZuKTsKICAgICB9CiAKKyAgICBjb25zdCBVUkwmIHNvdXJjZVVS
TE92ZXJyaWRlKCkgeyByZXR1cm4gbV9zb3VyY2VVUkxPdmVycmlkZTsgfQorCiBwcml2YXRlOgog
ICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisgICAgVVJM
IG1fc291cmNlVVJMT3ZlcnJpZGU7CiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX3NpemU7
CiAjZW5kaWYKQEAgLTg3OCw2ICs4ODIsOTggQEAgcHJpdmF0ZToKICAgICBDYWNoZWRIYXNoTWFw
PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlhYmxlRW52aXJvbm1l
bnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+IG1fbWFwOwogfTsK
IAorY2xhc3MgQ2FjaGVkQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50PiB7CitwdWJsaWM6CisgICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQm
IGVudikKKyAgICB7CisgICAgICAgIG1fdmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBlbnYubV92
YXJpYWJsZXMpOworICAgICAgICBtX3ZhcmlhYmxlTWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGVu
di5tX3ZhcmlhYmxlTWV0YWRhdGEpOworICAgICAgICBtX2hhc2ggPSBlbnYubV9oYXNoOworICAg
ICAgICBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkID0gZW52Lm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7
CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29tcGFjdFZhcmlh
YmxlRW52aXJvbm1lbnQmIGVudikgY29uc3QKKyAgICB7CisgICAgICAgIG1fdmFyaWFibGVzLmRl
Y29kZShkZWNvZGVyLCBlbnYubV92YXJpYWJsZXMpOworICAgICAgICBtX3ZhcmlhYmxlTWV0YWRh
dGEuZGVjb2RlKGRlY29kZXIsIGVudi5tX3ZhcmlhYmxlTWV0YWRhdGEpOworICAgICAgICBlbnYu
bV9oYXNoID0gbV9oYXNoOworICAgICAgICBlbnYubV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IG1f
aXNFdmVyeXRoaW5nQ2FwdHVyZWQ7CisgICAgfQorCisgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJv
bm1lbnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29t
cGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudiA9IG5ldyBDb21wYWN0VmFyaWFibGVFbnZpcm9u
bWVudDsKKyAgICAgICAgZGVjb2RlKGRlY29kZXIsICplbnYpOworICAgICAgICByZXR1cm4gZW52
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRWZWN0b3I8Q2FjaGVkUmVmUHRyPENhY2hl
ZFVuaXF1ZWRTdHJpbmdJbXBsPj4gbV92YXJpYWJsZXM7CisgICAgQ2FjaGVkVmVjdG9yPFZhcmlh
YmxlRW52aXJvbm1lbnRFbnRyeT4gbV92YXJpYWJsZU1ldGFkYXRhOworICAgIHVuc2lnbmVkIG1f
aGFzaDsKKyAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQ7Cit9OworCitjbGFzcyBDYWNo
ZWRDb21wYWN0VmFyaWFibGVNYXBLZXkgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENvbXBhY3RWYXJp
YWJsZU1hcEtleT4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IENvbXBhY3RWYXJpYWJsZU1hcEtleSYga2V5KQorICAgIHsKKyAgICAgICAgbV9lbnZp
cm9ubWVudC5lbmNvZGUoZW5jb2Rlciwga2V5Lm1fZW52aXJvbm1lbnQpOworICAgIH0KKworICAg
IHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENvbXBhY3RWYXJpYWJsZU1hcEtleSYga2V5
KSBjb25zdAorICAgIHsKKyAgICAgICAga2V5Lm1fZW52aXJvbm1lbnQgPSBtX2Vudmlyb25tZW50
LmRlY29kZShkZWNvZGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUHRyPENhY2hl
ZENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50PiBtX2Vudmlyb25tZW50OworfTsKKworY2xhc3Mg
Q2FjaGVkQ29tcGFjdFZhcmlhYmxlTWFwIDogcHVibGljIENhY2hlZE9iamVjdDxDb21wYWN0VmFy
aWFibGVNYXA+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBDb21wYWN0VmFyaWFibGVNYXAmIG1hcCkKKyAgICB7CisgICAgICAgIG1fbWFwLmVuY29k
ZShlbmNvZGVyLCBtYXAubV9tYXApOworICAgIH0KKworICAgIHZvaWQgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIENvbXBhY3RWYXJpYWJsZU1hcCYgbWFwKSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9tYXAuZGVjb2RlKGRlY29kZXIsIG1hcC5tX21hcCk7CisgICAgfQorCisgICAgQ29tcGFjdFZh
cmlhYmxlTWFwKiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAg
IENvbXBhY3RWYXJpYWJsZU1hcCogbWFwID0gbmV3IENvbXBhY3RWYXJpYWJsZU1hcDsKKyAgICAg
ICAgZGVjb2RlKGRlY29kZXIsICptYXApOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBDYWNoZWRIYXNoTWFwPENhY2hlZENvbXBhY3RWYXJpYWJsZU1hcEtleSwg
dW5zaWduZWQ+IG1fbWFwOworfTsKKworY2xhc3MgQ2FjaGVkQ29tcGFjdFZhcmlhYmxlTWFwSGFu
ZGxlIDogcHVibGljIENhY2hlZE9iamVjdDxDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gewor
cHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvbXBhY3RW
YXJpYWJsZU1hcDo6SGFuZGxlJiBoYW5kbGUpCisgICAgeworICAgICAgICBtX2Vudmlyb25tZW50
LmVuY29kZShlbmNvZGVyLCBoYW5kbGUubV9lbnZpcm9ubWVudCk7CisgICAgICAgIG1fbWFwLmVu
Y29kZShlbmNvZGVyLCBoYW5kbGUubV9tYXApOworICAgIH0KKworICAgIENvbXBhY3RWYXJpYWJs
ZU1hcDo6SGFuZGxlIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBoYW5kbGUubV9l
bnZpcm9ubWVudCA9IG1fZW52aXJvbm1lbnQuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBoYW5k
bGUubV9tYXAgPSBtX21hcC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFB0cjxDYWNoZWRDb21wYWN0VmFyaWFibGVF
bnZpcm9ubWVudD4gbV9lbnZpcm9ubWVudDsKKyAgICBDYWNoZWRSZWZQdHI8Q2FjaGVkQ29tcGFj
dFZhcmlhYmxlTWFwPiBtX21hcDsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CiBjbGFzcyBDYWNoZWRBcnJheSA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7CiBwdWJsaWM6CkBAIC0xMzAxLDEwICsxMzk3LDE2
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFN0cmluZyBkZWNvZGVkU291cmNlID0gbV9zb3Vy
Y2UuZGVjb2RlKGRlY29kZXIpOwogICAgICAgICBTb3VyY2VPcmlnaW4gZGVjb2RlZFNvdXJjZU9y
aWdpbiA9IG1fc291cmNlT3JpZ2luLmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgU3RyaW5nIGRl
Y29kZWRVUkwgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFN0cmluZyBkZWNvZGVk
VVJMU3RyaW5nID0gbV91cmwuZGVjb2RlKGRlY29kZXIpOworICAgICAgICBVUkwgc291cmNlVVJM
OworICAgICAgICBpZiAoZGVjb2Rlci5zb3VyY2VVUkxPdmVycmlkZSgpKSB7CisgICAgICAgICAg
ICBkZWNvZGVkU291cmNlT3JpZ2luID0gU291cmNlT3JpZ2luIHsgZGVjb2Rlci5zb3VyY2VVUkxP
dmVycmlkZSgpIH07CisgICAgICAgICAgICBzb3VyY2VVUkwgPSBkZWNvZGVyLnNvdXJjZVVSTE92
ZXJyaWRlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc291cmNlVVJMID0gVVJMKFVS
TCgpLCBkZWNvZGVkVVJMU3RyaW5nKTsKICAgICAgICAgVGV4dFBvc2l0aW9uIGRlY29kZWRTdGFy
dFBvc2l0aW9uID0gbV9zdGFydFBvc2l0aW9uLmRlY29kZShkZWNvZGVyKTsKIAotICAgICAgICBS
ZWY8U3RyaW5nU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gU3RyaW5nU291cmNlUHJv
dmlkZXI6OmNyZWF0ZShkZWNvZGVkU291cmNlLCBkZWNvZGVkU291cmNlT3JpZ2luLCBVUkwoVVJM
KCksIGRlY29kZWRVUkwpLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSk7CisgICAg
ICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4sIFdU
Rk1vdmUoc291cmNlVVJMKSwgZGVjb2RlZFN0YXJ0UG9zaXRpb24sIHNvdXJjZVR5cGUpOwogICAg
ICAgICBCYXNlOjpkZWNvZGUoZGVjb2Rlciwgc291cmNlUHJvdmlkZXIuZ2V0KCkpOwogICAgICAg
ICByZXR1cm4gJnNvdXJjZVByb3ZpZGVyLmxlYWtSZWYoKTsKICAgICB9CkBAIC0xNTE3LDcgKzE2
MTksNyBAQCBwcml2YXRlOgogICAgIENhY2hlZElkZW50aWZpZXIgbV9lY21hTmFtZTsKICAgICBD
YWNoZWRJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwogCi0gICAgQ2FjaGVkVmFyaWFibGVFbnZp
cm9ubWVudCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOworICAgIENhY2hlZENvbXBhY3RWYXJp
YWJsZU1hcEhhbmRsZSBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOwogCiAgICAgQ2FjaGVkV3Jp
dGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsKICAgICBDYWNoZWRXcml0ZUJhcnJpZXI8
Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5s
aW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CkBAIC0xODUyLDcgKzE5NTQsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhCiAgICAgbV9lY21hTmFtZS5lbmNvZGUo
ZW5jb2RlciwgZXhlY3V0YWJsZS5lY21hTmFtZSgpKTsKICAgICBtX2luZmVycmVkTmFtZS5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5pbmZlcnJlZE5hbWUoKSk7CiAKLSAgICBtX3BhcmVudFNj
b3BlVERaVmFyaWFibGVzLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLnBhcmVudFNjb3BlVERa
VmFyaWFibGVzKCkpOworICAgIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29k
ZXIsIGV4ZWN1dGFibGUubV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcyk7CiAKICAgICBtX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ2FsbC5lbmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5l
bmNvZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0
KTsKQEAgLTE4NjAsMTAgKzE5NjIsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkRnVuY3Rp
b25FeGVjdXRhCiAKIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENh
Y2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CiB7
Ci0gICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbnY7Ci0gICAgbV9wYXJlbnRTY29wZVREWlZhcmlh
Ymxlcy5kZWNvZGUoZGVjb2RlciwgZW52KTsKLQotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+KGRlY29kZXIudm0oKS5oZWFwKSkgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoZGVjb2RlciwgZW52LCAqdGhpcyk7CisgICAgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5k
bGUgZW52ID0gbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5kZWNvZGUoZGVjb2Rlcik7CisgICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXAp
KSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBXVEZNb3ZlKGVudiksICp0aGlz
KTsKICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwogCiAgICAg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKQEAgLTE4NzIsNyArMTk3Miw3
IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUKICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKIH0KIAotQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYgZGVjb2RlciwgVmFyaWFibGVF
bnZpcm9ubWVudCYgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIGNvbnN0IENhY2hlZEZ1bmN0aW9u
RXhlY3V0YWJsZSYgY2FjaGVkRXhlY3V0YWJsZSkKK0FMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImIGRlY29k
ZXIsIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIHBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBj
b25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmIGNhY2hlZEV4ZWN1dGFibGUpCiAgICAgOiBC
YXNlKGRlY29kZXIudm0oKSwgZGVjb2Rlci52bSgpLnVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
U3RydWN0dXJlLmdldCgpKQogICAgICwgbV9maXJzdExpbmVPZmZzZXQoY2FjaGVkRXhlY3V0YWJs
ZS5maXJzdExpbmVPZmZzZXQoKSkKICAgICAsIG1fbGluZUNvdW50KGNhY2hlZEV4ZWN1dGFibGUu
bGluZUNvdW50KCkpCkBAIC0xOTAyLDcgKzIwMDIsNyBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlCiAgICAgLCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1dGFibGUuZWNt
YU5hbWUoZGVjb2RlcikpCiAgICAgLCBtX2luZmVycmVkTmFtZShjYWNoZWRFeGVjdXRhYmxlLmlu
ZmVycmVkTmFtZShkZWNvZGVyKSkKIAotICAgICwgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcyhk
ZWNvZGVyLnZtKCkubV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChwYXJlbnRTY29wZVREWlZhcmlh
YmxlcykpCisgICAgLCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKFdURk1vdmUocGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMpKQogCiAgICAgLCBtX3JhcmVEYXRhKGNhY2hlZEV4ZWN1dGFibGUucmFy
ZURhdGEoZGVjb2RlcikpCiB7CkBAIC0yMDgwLDE5ICsyMTgwLDI0IEBAIHN0ZDo6cGFpcjxNYWxs
b2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW4KICAgICByZXR1cm4gZW5jb2Rlci5yZWxlYXNlKCk7
CiB9CiAKLVVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQor
VW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUsIFVSTCYmIHNv
dXJjZVVSTE92ZXJyaWRlKQogewogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2Rl
ciBkZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpOworICAgIERlY29kZXIgZGVjb2Rlcih2bSwgYnVm
ZmVyLCBzaXplLCBXVEZNb3ZlKHNvdXJjZVVSTE92ZXJyaWRlKSk7CiAgICAgc3RkOjpwYWlyPFNv
dXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CiAgICAgewogICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIGlmICghY2FjaGVkRW50cnktPmRlY29k
ZShkZWNvZGVyLCBlbnRyeSkpCisgICAgICAgIGlmICghY2FjaGVkRW50cnktPmRlY29kZShkZWNv
ZGVyLCBlbnRyeSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiY2FuJ3QgZGVjb2RlIGNvZGVi
bG9jayAxISIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZW50cnkuZmlyc3QgIT0ga2V5KQorICAgIGlmIChlbnRyeS5maXJzdCAhPSBr
ZXkpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJjYW4ndCBkZWNvZGUgY29kZWJsb2NrIDIhIik7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBkYXRhTG9nTG4oIlJldHVybmluZyBk
ZWNvZGVkIENvZGVCbG9jayIpOwogICAgIHJldHVybiBlbnRyeS5zZWNvbmQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAkocmV2aXNpb24g
MjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTM0LDEzICszNSwxMyBAQCBjbGFzcyBTb3VyY2VDb2RlS2V5OwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2s7CiAKIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNp
emVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFVu
bGlua2VkQ29kZUJsb2NrKik7Ci1VbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1w
bChWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKK1VubGlu
a2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtl
eSYsIGNvbnN0IHZvaWQqLCBzaXplX3QsIFVSTCYmKTsKIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
bmxpbmtlZENvZGVCbG9ja1R5cGU+Ci1VbmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVC
bG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3Qgc2l6ZSkKK1VubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBzaXplLCBVUkwmJiBzb3VyY2VVUkxPdmVycmlkZSA9IFVSTCgpKQogewotICAgIHJldHVybiBq
c0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJsb2NrSW1wbCh2bSwga2V5
LCBidWZmZXIsIHNpemUpKTsKKyAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlw
ZSo+KGRlY29kZUNvZGVCbG9ja0ltcGwodm0sIGtleSwgYnVmZmVyLCBzaXplLCBXVEZNb3ZlKHNv
dXJjZVVSTE92ZXJyaWRlKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362464</attachid>
            <date>2019-02-19 18:01:19 -0800</date>
            <delta_ts>2019-02-19 19:46:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>61157</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoSlNTY3JpcHQgKnNjcmlwdCk7CisKIHByaXZhdGU6
CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1t
CShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2ltcG9ydCAi
RXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0ICJKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCisjaW1w
b3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKQEAg
LTc0LDEzICs3NiwyMCBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2Fk
CiAgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCA9PSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIEFTU0VSVChrZXkuaXNTdHJpbmcoKSB8fCBrZXku
aXNTeW1ib2woKSk7CiAgICAgU3RyaW5nIG5hbWUgPSAga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOwor
ICAgIGRhdGFMb2dMbigicmVzb2x2aW5nICciLCBuYW1lLCAiJyIpOwogCi0gICAgVVJMIHJlZmVy
cmVyVVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZlcnJlciktPnRyeUdldFZhbHVlKCkp
OwotICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlzVmFsaWQoKSk7Ci0KLSAgICBVUkwg
dXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKLSAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICBpZiAo
SlNTdHJpbmcqIHJlZmVycmVyU3RyaW5nID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZtLCBy
ZWZlcnJlcikpIHsKKyAgICAgICAgVVJMIHJlZmVycmVyVVJMKFVSTCgpLCByZWZlcnJlclN0cmlu
Zy0+dmFsdWUoZXhlYykpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1Zh
bGlkKCkpOworCisgICAgICAgIFVSTCB1cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOworICAg
ICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVVJMIHVybCA9IFVS
TChVUkwoKSwgbmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAg
cmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9CiAKICAgICB0
aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBVUkwgZnJvbSBp
ZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTYyLDkgKzE3MSw5
IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICAgICAgcmV0
dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIk5vIG1vZHVsZSBs
b2FkZXIgcHJvdmlkZWQuIikpOwogCiAgICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZD4odm0sIGRlZmVycmVkKTsKLSAgICBhdXRvIHN0cm9u
Z0tleSA9IFN0cm9uZzxKU1N0cmluZz4odm0sIGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBr
ZXkpKTsKICAgICBhdXRvKiByZXNvbHZlID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIDEsICJyZXNvbHZlIiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKICAg
ICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mgb2sgYmVj
YXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KKyAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBj
b250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSldOwogICAgICAgICBpZCBzY3JpcHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQs
IHRvUmVmKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAKQEAgLTE3NSw3ICsxODQsMjUgQEAg
SlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0OjptbwogICAgICAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXJncy5hcHBl
bmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VDb2RlOm1vZHVsZUtl
eV0pOworICAgICAgICBKU1NjcmlwdCoganNTY3JpcHQgPSBzdGF0aWNfY2FzdDxKU1NjcmlwdCAq
PihzY3JpcHQpOworCisgICAgICAgIEpTU291cmNlQ29kZSogc291cmNlID0gW2pzU2NyaXB0IGpz
U291cmNlQ29kZV07CisgICAgICAgIGlmIChVTkxJS0VMWShbanNTY3JpcHQgdHlwZV0gIT0ga0pT
U2NyaXB0VHlwZU1vZHVsZSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBtYWtlU3RyaW5nKCJUaGUgSlNTY3JpcHQgdGhhdCB3YXMgcHJvdmlkZWQgZGlk
IG5vdCBoYXZlIGV4cGVjdGVkIHR5cGUgb2Yga0pTU2NyaXB0VHlwZU1vZHVsZS4iKSkpOworICAg
ICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpy
ZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0
cmluZyBvbGRNb2R1bGVLZXkgeyBbW2pzU2NyaXB0IHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmdd
IH07CisgICAgICAgIGRhdGFMb2dMbigib2xkIGtleT0iLCBvbGRNb2R1bGVLZXksICIgbmV3S2V5
PSIsIG1vZHVsZUtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgb2xkTW9kdWxlS2V5KSAhPSBtb2R1bGVLZXkpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oInJlamVjdGluZyBiZWNhdXNlIG9sZCBrZXkgIT0gbmV3S2V5Iik7CisgICAgICAgICAg
ICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiVGhlIHNhbWUg
SlNTY3JpcHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzLCBwcmV2
aW91c2x5OiAiLCBvbGRNb2R1bGVLZXksICIgYW5kIG5vdzogIiwgbW9kdWxlS2V5LnN0cmluZygp
KSkpOworICAgICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURl
ZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGFyZ3MuYXBwZW5kKHNvdXJjZSk7CiAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQ
cm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQg
bmV2ZXIgYmUgc2Vlbi4uLiIpOwogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7
CiAgICAgfSk7CkBAIC0yMTAsNiArMjM3LDI0IEBAIEpTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVj
dDo6bW9kdWxlTG9hZGUKICAgICByZXR1cm4gbWV0YVByb3BlcnRpZXM7CiB9CiAKK0pTVmFsdWUg
SlNBUElHbG9iYWxPYmplY3Q6OmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKEpTU2NyaXB0
ICpzY3JpcHQpCit7CisgICAgQVNTRVJUKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1
bGUpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgLy9hdXRvIGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSk7CisgICAgYXV0byBr
ZXkgPSBTdHJpbmcgeyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSB9OworICAg
IGRhdGFMb2dMbigibG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUsIGtleT0iLCBrZXkpOwor
ICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGds
b2JhbEV4ZWMoKSwga2V5LCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAvL3By
b21pc2UtPnRoZW4oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
IGF1dG8gcmVzdWx0ID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShnbG9iYWxFeGVjKCks
IHRoaXMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmVzdWx0
LT5yZXNvbHZlKGdsb2JhbEV4ZWMoKSwgcHJvbWlzZSk7CisgICAgcmV0dXJuIHJlc3VsdC0+cHJv
bWlzZSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMjQxNzY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Jhc2UuaCIKKyNp
bmNsdWRlICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpTQmFzZVByaXZhdGUuaCIKIAog
I2luY2x1ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0OCwxNSBAQAogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwg
SlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBz
b3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGNvbnN0IEpTTG9ja0hvbGRlciYs
IEV4ZWNTdGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0g
ICAgaWYgKCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBVTlVT
RURfUEFSQU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBqc1RoaXNPYmplY3QgPSB0b0pTKHRoaXNP
YmplY3QpOwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdM
aW5lTnVtYmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNldHMgInRoaXMiIHRvIHRoZSBnbG9iYWwg
b2JqZWN0IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwot
ICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmco
KSA6IFN0cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQt
PnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291
cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZElu
dChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKLQogICAgIE5ha2VkUHRy
PEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gcHJvZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgUHJvZmlsaW5n
UmVhc29uOjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsK
IApAQCAtODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
UmVmCiAgICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0IGluIHRoZSBpbnNwZWN0b3IgaW4gY2Fz
ZSBhbiBpbnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAgICAgICAgIGdsb2JhbE9iamVjdC0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhj
ZXB0aW9uKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAtOTAsNiArODEsMjQgQEAgSlNW
YWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIHJldHVybiB0b1JlZihl
eGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpT
Q29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEs
IHN0YXJ0aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJj
ZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKKyAgICBTb3VyY2VDb2RlIHNv
dXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNl
VVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRp
bmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51
bWJlcigpKSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwg
ZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlvbik7Cit9CisKIGJvb2wgSlND
aGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpT
U3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewogICAgIGlmICghY3R4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgorCituYW1lc3BhY2UgSlNDIHsK
K2NsYXNzIEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKworZXh0ZXJuICJDIiBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0M6OkpTTG9ja0hvbGRl
ciYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJldmlzaW9uIDI0MTc2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkNvbXBsZXRp
b24uaCIKKyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU0NJbmxpbmVzLmgi
CiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0
ZS5oIgpAQCAtMTAzLDE3ICsxMDQsNDcgQEAgLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihO
U1N0cmluZyAqKQogICAgIHJldHVybiBbc2VsZiBldmFsdWF0ZVNjcmlwdDpzY3JpcHQgd2l0aFNv
dXJjZVVSTDpuaWxdOwogfQogCi0tIChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5n
ICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMCitzdGF0aWMgSlNWYWx1
ZSAqZXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0ICpjb250ZXh0LCBSZWZQdHI8T3BhcXVlSlNTdHJp
bmc+IHNvdXJjZSwgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiB1cmwpCiB7CiAgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb25WYWx1ZSA9IG51bGxwdHI7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2
YWx1YXRlU2NyaXB0KGNvbnRleHQtPm1fY29udGV4dCwgc291cmNlLmdldCgpLCBudWxscHRyLCB1
cmwuZ2V0KCksIDAsICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICBpZiAoZXhjZXB0aW9uVmFsdWUp
CisgICAgICAgIHJldHVybiBbY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uVmFsdWVdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3Vs
dCBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKKy0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDoo
TlNTdHJpbmcgKilzY3JpcHQgd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3sKICAg
ICBhdXRvIHNjcmlwdEpTID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzY3JpcHQpOwogICAg
IGF1dG8gc291cmNlVVJMSlMgPSBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKFtzb3VyY2VVUkwg
YWJzb2x1dGVTdHJpbmddKTsKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3Jp
cHQobV9jb250ZXh0LCBzY3JpcHRKUy5nZXQoKSwgbnVsbHB0ciwgc291cmNlVVJMSlMuZ2V0KCks
IDAsICZleGNlcHRpb25WYWx1ZSk7CisgICAgcmV0dXJuIGV2YWx1YXRlU2NyaXB0KHNlbGYsIHNj
cmlwdEpTLCBzb3VyY2VVUkxKUyk7Cit9CiAKLSAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCi0gICAg
ICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVd
OworLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNTY3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0Cit7Cisg
ICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtKSB7CisgICAgICAgIGF1
dG8qIGpzU291cmNlQ29kZSA9IFtzY3JpcHQganNTb3VyY2VDb2RlXTsKIAotICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNvbnRleHQ6c2VsZl07CisgICAg
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOworICAgICAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51bGxwdHI7CisgICAg
ICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwg
ZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBqc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgJmV4
Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsK
KyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29u
dGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMobV9j
b250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byogZ2xvYmFs
T2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBUElHbG9iYWxPYmplY3QqPih2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAg
ICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFz
b246W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIkNvbnRleHQgZG9lcyBu
b3Qgc3VwcG9ydCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4dDpzZWxm
XTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCBn
bG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKHNjcmlwdCkpIGluQ29u
dGV4dDpzZWxmXTsKIH0KIAogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQpA
QCAtMzAwLDYgKzMzMSwxMSBAQCAtIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOihKU1Zh
bHVlCiAgICAgcmV0dXJuIE5POwogfQogCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90aWZ5RXhj
ZXB0aW9uV2l0aFN0cmluZzooU3RyaW5nJilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3NlbGYgdmFs
dWVGcm9tTm90aWZ5RXhjZXB0aW9uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3Nh
Z2U6c3RyaW5nIGluQ29udGV4dDpzZWxmXS5KU1ZhbHVlUmVmXTsKK30KKwogLSAodm9pZCliZWdp
bkNhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSBjYWxsZWVWYWx1
ZTooSlNWYWx1ZVJlZiljYWxsZWVWYWx1ZSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVl
IGFyZ3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNW
YWx1ZVJlZiAqKWFyZ3VtZW50cwogewogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJy
ZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZh
dGUuaAkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBACiAvKiEgQGFi
c3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWluZyB0byBs
b2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBmb3IgY29u
dGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChub25hdG9taWMsIHdl
YWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSBKU0Nf
QVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKIAor
LyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBAcGFyYW0gc2NyaXB0
IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0aGUgcHJvdmlkZWQg
SlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFtLCB0aGUgc2NyaXB0
IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGV2YWx1YXRp
b24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1Njcmlw
dFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkgYW5kIHdp
bGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFueSB0cmFu
c2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3aWxsIHRy
ZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRlbGVnYXRl
IGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlw
dCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpT
U2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTc2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
MTggQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAogQGNsYXNzIEpTVmlydHVhbE1hY2hpbmU7
CiAKKy8qIQorIEBlbnVtIEpTU2NyaXB0VHlwZQorIEBhYnN0cmFjdCAgICAgQSBjb25zdGFudCBp
ZGVudGlmeWluZyB0aGUgZXhlY3V0aW9uIHR5cGUgb2YgYSBKU1NjcmlwdC4KKyBAY29uc3RhbnQg
ICAgIGtKU1NjcmlwdFR5cGVQcm9ncmFtICBUaGUgdHlwZSBvZiBhIG5vcm1hbCBKYXZhU2NyaXB0
IHByb2dyYW0uCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlTW9kdWxlICAgVGhlIHR5cGUg
b2YgYSBtb2R1bGUgSmF2YVNjcmlwdCBwcm9ncmFtLgorICovCit0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBKU1NjcmlwdFR5cGUpIHsKKyAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSwKKyAgICBr
SlNTY3JpcHRUeXBlTW9kdWxlLAorfTsKKworCiBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChK
U0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIEpTU2NyaXB0IDogTlNP
YmplY3QKIApAQCAtNDEsNyArNTMsNyBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0Nf
TUFDX1RCQSksCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2Fu
IGJlIGV2YWx1YXRlZCBpbi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgogICovCi0rIChudWxs
YWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtOworKyAobnVsbGFibGUgaW5zdGFu
Y2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSAvKkpTQ19BUElfREVQUkVDQVRFRChtYWNvc3goSlND
X01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKSovOwogCiAvKiEKICBAbWV0aG9kCkBAIC01NSwx
MyArNjcsNDMgQEAgSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLAogCiAg
SWYgdGhlIGZpbGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0
dXJuIG5pbC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZp
bGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAq
KXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5k
Qnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7Ci0KKysgKG51bGxhYmxl
IGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmly
dHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxh
YmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5T
VVJMICopY2FjaGVQYXRoIC8qSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFDX1RCQSks
IGlvcyhKU0NfSU9TX1RCQSkpKi87CiAKIC8qIQogIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgaXMg
ZXF1aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENv
ZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgogICovCi0rIChudWxsYWJsZSBpbnN0YW5jZXR5
cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICop
Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQ
YXRoOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwg
KilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENv
ZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNh
Y2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCAvKkpTQ19BUElfREVQUkVDQVRFRChtYWNv
c3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKSovOworCisvKiEKKyBAbWV0aG9kCisg
QGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFj
aGluZS4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KKyBAcGFy
YW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGlu
LgorIEBwYXJhbSBzb3VyY2VVUkwgVGhlIHNvdXJjZSBVUkwgdG8gYXNzb2NpYXRlIHdpdGggdGhp
cyBzY3JpcHQuIEZvciBtb2R1bGVzLCB0aGlzIGlzIHRoZSBtb2R1bGUgaWRlbnRpZmllci4KKyBA
cGFyYW0gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2
YWx1YXRlZCBieSB0aGUgSlMgdm0uCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5n
IHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24u
CisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90
IGJlIGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlw
dC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRU
eXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhTb3Vy
Y2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5k
Qnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vy
cm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9kCisgQGFi
c3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGlu
ZSB3aXRoIGEgcGF0aCB0byBhIGNvZGVzaWduaW5nIGFuZCBieXRlY29kZSBjYWNoaW5nLgorIEBw
YXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291cmNlLgorIEBwYXJhbSB2bSBUaGUg
SlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFt
IGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBm
aWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0byBhc3NvY2lh
dGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBpZGVu
dGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVy
ZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJhbSBlcnJv
ciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlm
IHRoZSByZXN1bHQgaXMgbmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1c3Np
b24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBiZSBleHRl
cm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlzIG1ldGhvZCB3aWxs
IGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgorCisgSWYgdGhlIGZpbGUgYXQg
ZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4KKyAqLwor
KyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUg
aW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VV
UkwgYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91
dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCistIChCT09MKWNhY2hl
Qnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVy
cm9yOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQko
cmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAjaW1wb3J0ICJQYXJzZXJFcnJv
ci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl
IDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxl
bWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNWaXJ0dWFsTWFjaGluZSogbV92aXJ0
dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBlOworICAgIEZpbGVTeXN0ZW06Ok1h
cHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0cmluZyBtX3NvdXJjZTsKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJldGFpblB0cjxOU1VSTD4gbV9jYWNo
ZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2NhY2hlZEJ5dGVjb2RlOwogICAgIEpT
Qzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291cmNlQ29kZTsKQEAgLTExNiw2ICsx
MjAsNTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUgogICAgIHJl
dHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTpj
YWNoZVBhdGhdOwogfQogCitzdGF0aWMgSlNTY3JpcHQgKmNyZWF0ZUVycm9yKE5TU3RyaW5nICpt
ZXNzYWdlLCBOU0Vycm9yKiogZXJyb3IpCit7CisgICAgaWYgKGVycm9yKQorICAgICAgICAqZXJy
b3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJKU1NjcmlwdEVycm9yRG9tYWluIiBjb2Rl
OjEgdXNlckluZm86QHsgQCJtZXNzYWdlIjogbWVzc2FnZSB9XTsKKyAgICByZXR1cm4gbmlsOwor
fQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZp
cnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aFNvdXJjZVVSTDooTlNVUkwg
Kilzb3VyY2VVUkwgYW5kU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBhbmRCeXRlY29kZUNhY2hl
OihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiopZXJyb3IKK3sKKyAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9
IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0g
c291cmNlOworICAgIHJlc3VsdC0+bV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CisgICAgcmVzdWx0
LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3Jp
cHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9y
eU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNV
UkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6
KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBV
UkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CisgICAgaWYgKCFmaWxlUGF0
aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGggJUAgaXMgbm90IGEgbG9jYWwgZmlsZSIsIHN0
YXRpY19jYXN0PE5TU3RyaW5nICo+KGZpbGVQYXRoVVJMKV0sIGVycm9yKTsKKworICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBzeXN0ZW1QYXRoID0gZmlsZVBhdGhVUkwuZmls
ZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBmaWxlRGF0YShz
eXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBj
cmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZpbGUgYXQgcGF0aCAlQCBj
b3VsZCBub3QgYmUgbWFwcGVkLiIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KHN5c3RlbVBhdGgp
XSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpCisg
ICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5v
dCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIEpTU2NyaXB0ICpyZXN1bHQg
PSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92
aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1
bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJp
dHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUo
KSkpOworICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZNb3ZlKGZpbGVEYXRhKTsKKyAg
ICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBh
dGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNp
emUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQpAQCAtMTUyLDIyICsyMDMsMTQgQEAg
LSAodm9pZClyZWFkQ2FjaGUKICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRl
Y29kZSB7IGJ1ZmZlciwgc2l6ZSB9OwogfQogCi0tICh2b2lkKXdyaXRlQ2FjaGUKKy0gKEJPT0wp
Y2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIGlmIChtX2Nh
Y2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAhbV9jYWNoZVBhdGgpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEpTQzo6UGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBtX2pzU291cmNlQ29k
ZS0+c291cmNlQ29kZSgpLCBlcnJvcik7Ci0gICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJp
bmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKQotICAgICAg
ICByZXR1cm47Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAg
ICBpZiAoIXJjKQotICAgICAgICB3cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1f
Y2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7CisgICAgU3RyaW5nIGVycm9y
U3RyaW5nIHsgfTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAo
IWVycm9yU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gISFjcmVhdGVFcnJvcihlcnJv
clN0cmluZywgZXJyb3IpOworIAorICAgIHJldHVybiBZRVM7CiB9CiAKIEBlbmQKQEAgLTE4OSwy
NCArMjMyLDgwIEBAIC0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAg
ICByZXR1cm4gJm1fY2FjaGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilq
c1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChOU1VSTCAq
KXNvdXJjZVVSTAoreworICAgIGlmICghbV9zb3VyY2VVUkwpCisgICAgICAgIGRhdGFMb2dMbigi
Tm8gc291cmNlIFVSTCEiKTsKKyAgICByZXR1cm4gbV9zb3VyY2VVUkwuZ2V0KCk7Cit9CisKKy0g
KEpTU2NyaXB0VHlwZSl0eXBlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAg
IEFTU0VSVChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICByZXR1cm4gbV90
eXBlOworfQorCistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlCit7CisgICAgaWYg
KG1fanNTb3VyY2VDb2RlKQogICAgICAgICByZXR1cm4gbV9qc1NvdXJjZUNvZGUuZ2V0KCk7Ci0g
ICAgfQogCiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlv
biB7IH07Ci0gICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0g
SlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3JpZ2luKG1v
ZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3Np
dGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKKworICAgIFN0
cmluZyB1cmwgPSBTdHJpbmcgeyBbW3NlbGYgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfTsK
KyAgICBkYXRhTG9nTG4oImpzU291cmNlQ29kZSBVUkw9IiwgdXJsKTsKKyAgICBhdXRvIHR5cGUg
PSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSA/IEpTQzo6U291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpNb2R1bGUgOiBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbTsK
KyAgICBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBKU1Njcmlw
dFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2VsZiwgSlNDOjpTb3VyY2VPcmlnaW4odXJsKSwgVVJM
KHsgfSwgdXJsKSwgc3RhcnRQb3NpdGlvbiwgdHlwZSk7CiAgICAgSlNDOjpTb3VyY2VDb2RlIHNv
dXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9u
ZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CiAgICAg
SlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVh
dGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwogICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwg
anNTb3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3cml0ZUNhY2hlXTsKICAgICByZXR1cm4ganNTb3Vy
Y2VDb2RlOwogfQogCi1AZW5kCistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKK3sK
KyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJB
bHJlYWR5IGhhdmUgY2FjaGVkIGJ5dGVjb2RlISIpOworICAgICAgICByZXR1cm4gWUVTOworICAg
IH0KKworICAgIGlmICghbV9jYWNoZVBhdGgpIHsKKyAgICAgICAgZXJyb3IgPSAibm8gY2FjaGUg
cGF0aCBwcm92aWRlZCI7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBKU0M6OlBh
cnNlckVycm9yIHBhcnNlckVycm9yOworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBr
SlNTY3JpcHRUeXBlTW9kdWxlOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5l
cmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29k
ZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGtKU1NjcmlwdFR5cGVQcm9ncmFtOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpn
ZW5lcmF0ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29kZV0t
PnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAocGFyc2VyRXJyb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUg
PSB7IH07CisgICAgICAgIGVycm9yID0gInVuYWJsZSB0byBnZW5lcmF0ZSBjb21wbGV0ZSBieXRl
Y29kZSI7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAgaW50IGZkID0gb3BlbihbbV9j
YWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAg
ICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
b3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgIiBkdWUgdG8gZXJy
b3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisgICAg
aW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgIGlmIChy
ZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9jayB0aGUgY2FjaGUgZmls
ZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiI7CisgICAgZWxzZQorICAgICAgICB3cml0ZShm
ZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKKyAg
ICBkYXRhTG9nTG4oIldyb3RlIGNhY2hlZCBieXRlY29kZSEiKTsKKyAgICBjbG9zZShmZCk7Cisg
ICAgcmV0dXJuICFyZXR1cm5Db2RlOworfQogCitAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0MTc2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMSBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVuc2lnbmVk
KWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlNDOjpDYWNo
ZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSopanNTb3Vy
Y2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxhYmxlIGNv
bnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpKU1NvdXJj
ZUNvZGUqKWpzU291cmNlQ29kZTsKKy0gKEJPT0wpd3JpdGVDYWNoZTooU3RyaW5nJillcnJvcjsK
Ky0gKE5TVVJMICopc291cmNlVVJMOworLSAoSlNTY3JpcHRUeXBlKXR5cGU7CiAKIEBlbmQKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQ
cm92aWRlci5tbQkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miwx
MCBAQCBTdHJpbmdWaWV3IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OnNvdXJjCiAKIGNvbnN0IEpT
Qzo6Q2FjaGVkQnl0ZWNvZGUqIEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2Rl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fc2NyaXB0LmdldCgpIGNhY2hlZEJ5dGVjb2RlXTsK
KyAgICBhdXRvKiByZXN1bHQgPSBbbV9zY3JpcHQuZ2V0KCkgY2FjaGVkQnl0ZWNvZGVdOworICAg
IGlmIChyZXN1bHQpCisgICAgICAgIGRhdGFMb2dMbigicmV0dXJuaW5nIG5vbi1udWxsIGNhY2hl
ZCBieXRlY29kZSEiKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYgLy8gSlNDX09C
SkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dEluY2x1ZGVzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0SW5jbHVkZXMubQkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogLy8gU2luY2Ugd2UgaW5jbHVkZSBmaWxlcyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRocm91
Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBub24tcmV3cml0dGVuIHZhbHVl
cy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19B
VkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogI2RlZmluZSBK
U0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAy
NDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkoY29uc3QgY2hhciopOwogI2VuZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBj
aGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwxMSArMTM4MCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciogYXJndltdKQogICAgIFNldEVycm9yTW9kZSgwKTsKICNlbmRpZgogCisgICAgY29uc3Qg
Y2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAotICAgIHRlc3RPYmplY3RpdmVDQVBJKCk7CisgICAgdGVzdE9iamVjdGl2ZUNB
UEkoZmlsdGVyKTsKICNlbmRpZgogCi0gICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEg
PyBhcmd2WzFdIDogTlVMTDsKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmls
dGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAyNDE3NjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDEyICs0MSwxNCBAQAogI2ltcG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9y
dCAiUmVncmVzczE0MTgwOS5oIgogCisjaW1wb3J0IDxsaWJwcm9jLmg+CiAjaW1wb3J0IDxwdGhy
ZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5Rm9vdHByaW50Lmg+
CiAjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+CiAKKwog
ZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhK
U0NvbnRleHRSZWYpOwogZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZv
ckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCkBAIC01NCw3ICs1Niw3IEBAIGV4dGVybiAiQyIg
Ym9vbCBfQmxvY2tfaGFzX3NpZ25hdHVyZShpZCkKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9C
bG9ja19zaWduYXR1cmUoaWQpOwogCiBleHRlcm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9p
ZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSShjb25zdCBjaGFyKik7CiBleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcg
KiwgYm9vbCk7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRApAQCAtMTk4NSw5ICsxOTg3LDkg
QEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewogICAgICAgICBOU1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
TlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOwogCi0gICAgICAgIE5TU3Ry
aW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9y
dCBsZXQgZm9vID0gbjsiOwotICAgICAgICBOU1N0cmluZyogYmFyU291cmNlID0gQCJpbXBvcnQg
XCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiOwotICAgICAg
ICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0
b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9v
OyI7CisgICAgICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCBcIm90aGVyRGlyZWN0
b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7CisgICAgICAgIE5TU3RyaW5nKiBi
YXJTb3VyY2UgPSBAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQg
Zm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQg
eyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9IG51
bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7IjsKIAogICAgICAgICBOU1VSTCogZm9vUGF0aCA9
IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcyJdOwog
ICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAImJhci5qcyJdOwpAQCAtMjAyMywxMiArMjAyNSwxNCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAgICAgICAgIH0KIAogICAgICAgICBOU0ZpbGVNYW5hZ2Vy
KiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICAgICAg
W2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVycm9yOm5pbF07Ci0gICAgICAg
IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBlcnJvcjpuaWxdOwotICAgICAg
ICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKLSAgICAg
ICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsK
LSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6
bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGgg
ZXJyb3I6bmlsXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gdHJ1ZTsKKyAgICAgICAgcmVt
b3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmls
XTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJh
clBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAg
ICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQ
YXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVkQWxsKTsKICAgICB9CiB9
CiAKQEAgLTIwNzgsNyArMjA4Miw3IEBAIC0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29u
dGV4dCBmZXQKIAogQGVuZAogCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCitzdGF0
aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpCiB7CiAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CiAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVn
YXRlIG5ld0NvbnRleHRdOwpAQCAtMjA4OSwzNCArMjA5MywxNjMgQEAgc3RhdGljIHZvaWQgdGVz
dExvYWRCYXNpY0ZpbGUoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCisK
K0BpbnRlcmZhY2UgSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRl
eHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJE
ZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAq
cmVzdWx0ID0gW1tKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5p
dF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIg
d2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihK
U1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhT
dHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBkYXRhTG9nTG4oImluc2lkZSBmZXRj
aE1vZHVsZUZvcklkZW50aWZpZXIiKTsKKyAgICBOU0xvZyhAImZpbGUgcGF0aD0lQCIsIGZpbGVQ
YXRoKTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1Njcmlw
dFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9y
eU1hcHBlZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpmaWxlUGF0aCBhbmRC
eXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFty
ZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBb
cmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9t
TWVzc2FnZTpAIlVuYWJsZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsK
K30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgc2l6
ZV90IGNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAs
IDApOworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pT
Q29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAgICAgICBj
b250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAq
cHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7
IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1ZhbHVl
ICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAg
ICAgc2l6ZV90IGFmdGVyQ291bnQgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElT
VEZEUywgMCwgMCwgMCk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiSlNTY3JpcHQgc2hvdWxkIG5v
dCBob2xkIGEgZmlsZSBkZXNjcmlwdG9yIiwgY291bnQgPT0gYWZ0ZXJDb3VudCk7CisgICAgICAg
IGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9CisgICAg
c2l6ZV90IGFmdGVyID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAs
IDAsIDApOworICAgIGNoZWNrUmVzdWx0KEAiRmlsZSBkZXNjcmlwdG9yIGNvdW50IHNob2x1ZG4n
dCBjaGFuZ2UgYWZ0ZXIgY29udGV4dCBpcyBkZWFsbG9jZWQiLCBjb3VudCA9PSBhZnRlcik7Cit9
CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRl
eHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxl
Z2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVz
dWx0ID0gW1tKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF07Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJl
c29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVl
ICopcmVqZWN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlamVjdCk7CisKKyAgICBOU1VSTCAqZmls
ZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmluZ11dOworICAg
IE5TU3RyaW5nICpwYXRoU3RyaW5nID0gW2ZpbGVQYXRoIGFic29sdXRlU3RyaW5nXTsKKyAgICBp
ZiAoW3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXNpYy5qcyJdIHx8IFtwYXRoU3RyaW5n
IGNvbnRhaW5zU3RyaW5nOkAiZm9vLmpzIl0pIHsKKyAgICAgICAgYXV0byAqc2NyaXB0ID0gW0pT
U2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6
Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRo
IHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdp
dGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChbcGF0aFN0cmluZyBjb250YWluc1N0cmluZzpAImJhci5qcyJdKSB7CisgICAgICAgIGF1dG8g
KnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aFNvdXJjZVVSTDpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOkAiL25vdC9wYXRoL3RvL2Jhci5qcyJdIGFuZFNvdXJjZTpAIiIgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2Ny
aXB0KTsKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdEpTU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRBdWdtZW50
ZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIE5TVVJMICpiYXNpYyA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiLi9iYXNpYy5qcyIgcmVsYXRpdmVUb1VSTDpyZXNvbHZlUGF0aFRvU2NyaXB0
cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDEgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBl
OmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNo
aW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFzaWMgd2l0aFNvdXJjZVVSTDpiYXNpYyBh
bmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworCisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dDEgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDFdOworICAgICAgICBKU1ZhbHVl
ICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAg
ICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHJlc3VsdDEsIG51bGwpOworCisgICAgICAg
IE5TVVJMICpmb28gPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIi4vZm9vLmpzIiByZWxhdGl2ZVRv
VVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0MiA9
IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNo
aW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmb28g
d2l0aFNvdXJjZVVSTDpmb28gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0Mik7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdDIgPSBb
Y29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDJdOworCisgICAgICAgIF9fYmxvY2sgYm9v
bCB3YXNSZWplY3RlZCA9IGZhbHNlOworICAgICAgICBbcmVzdWx0MiBpbnZva2VNZXRob2Q6QCJj
YXRjaCIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqcmVhc29uKSB7CisgICAgICAgICAgICB3
YXNSZWplY3RlZCA9IFtyZWFzb24gaXNPYmplY3RdOworICAgICAgICB9XV07CisKKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJNb2R1bGUgSlNTY3JpcHQgaW1wb3J0ZWQgd2l0aCBkaWZmZXJlbnQgaWRl
bnRpZmllcnMgaXMgcmVqZWN0ZWQiLCB3YXNSZWplY3RlZCk7CisgICAgfQorfQorCisjZGVmaW5l
IFJVTih0ZXN0KSBkbyB7IFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSBcCisgICAg
ICAgICAgICBicmVhazsgXAorICAgICAgICBOU0xvZyhAIiVzLi4uXG4iLCAjdGVzdCk7IFwKKyAg
ICAgICAgdGVzdDsgXAorICAgICAgICBOU0xvZyhAIiVzOiBkb25lLlxuIiwgI3Rlc3QpOyBcCisg
ICAgfSB3aGlsZSAoZmFsc2UpCisKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciog
ZmlsdGVyKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKIAotICAg
IGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCk7Ci0gICAgcnVuSklUVGhyZWFkTGltaXRUZXN0cygp
OworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25zdCBjaGFyKiB0ZXN0KSAtPiBib29sIHsK
KyAgICAgICAgaWYgKGZpbHRlcikKKyAgICAgICAgICAgIHJldHVybiBzdHJjYXNlc3RyKHRlc3Qs
IGZpbHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBSVU4oY2hlY2tO
ZWdhdGl2ZU5TSW50ZWdlcnMoKSk7CisgICAgUlVOKHJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKSk7
CisKKyAgICBSVU4odGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKSk7CisgICAg
UlVOKHRlc3RGZXRjaCgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFR3b0N5Y2xlKCkpOworICAg
IFJVTih0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpKTsKKyAgICBSVU4odGVzdEltcG9ydE1vZHVs
ZVR3aWNlKCkpOworICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZSgpKTsKIAotICAgIHRlc3RMb2Fk
ZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKCk7Ci0gICAgdGVzdEZldGNoKCk7Ci0gICAgdGVz
dEZldGNoV2l0aFR3b0N5Y2xlKCk7Ci0gICAgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKTsKLSAg
ICB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKTsKLSAgICB0ZXN0Qnl0ZWNvZGVDYWNoZSgpOworICAg
IFJVTih0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpKTsKKyAgICBSVU4odGVzdExvYWRl
clJlamVjdHNGYWlsZWRGZXRjaCgpKTsKIAotICAgIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0
VVJMKCk7Ci0gICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOworICAgIFJVTih0ZXN0
SlNTY3JpcHRVUkwoKSk7CiAKICAgICAvLyBGaWxlIGxvYWRpbmcKLSAgICB0ZXN0TG9hZEJhc2lj
RmlsZSgpOworICAgIFJVTih0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpKTsKKyAgICBSVU4o
dGVzdExvYWRCYXNpY0ZpbGUoKSk7CiAKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRp
b246OlJlc29sdmVFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZWplY3RFYWdlcik7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZl
TGF0ZSk7Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKTsK
LSAgICBwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VDcmVhdGVSZXNv
bHZlZCgpOwotICAgIHByb21pc2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFsbGVsUHJvbWlz
ZVJlc29sdmVUZXN0KCk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVzb2x2ZUVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVqZWN0RWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZXNvbHZlTGF0ZSkpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
amVjdExhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKSk7CisgICAg
UlVOKHByb21pc2VDcmVhdGVSZXNvbHZlZCgpKTsKKyAgICBSVU4ocHJvbWlzZUNyZWF0ZVJlamVj
dGVkKCkpOworICAgIFJVTihwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpKTsKIAogICAgIHRl
c3RPYmplY3RpdmVDQVBJTWFpbigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanMJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitpbXBvcnQgIi4vYmFyLmpzIjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtODg0LDYgKzg4NCw3IEBACiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBU
eXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVu
dGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2
OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBD
b3B5IFN1cHBvcnQgU2NyaXB0ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3
OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlm
aWVkU291cmNlMy1tbS5tbSAqLzsgfTsKIAkJNTMwQTY2QkExRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2U0LW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1t
ICovOyB9OwpAQCAtMTE2MCw2ICsxMTYxLDcgQEAKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJB
IC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3OTgwQzE2RDFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJl
ZFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODY5NDNBMUY4QzBBQzgwMDkyMzJB
RSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJD
NDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi87IH07CiAJCTc5ODkzNzc5
MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0Zp
eGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2
MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hN
YXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjAyOCw2ICsyMDMwLDcgQEAKIAkJ
CWRzdFBhdGggPSB0ZXN0YXBpU2NyaXB0czsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKIAkJ
CWZpbGVzID0gKAorCQkJCTUyRDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAvKiBmb28uanMgaW4gQ29w
eSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFz
aWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQlGRUNCOEIyQTFEMjVDQjVBMDA2
RjI0NjMgLyogdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMgaW4gQ29weSBTdXBwb3J0IFNj
cmlwdCAqLywKIAkJCQk1REJCMTUxQjEzMUQwQjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBD
b3B5IFN1cHBvcnQgU2NyaXB0ICovLApAQCAtMzM3Niw2ICszMzc5LDcgQEAKIAkJNTJDMDYxMUQx
QUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
Qzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI4MTlB
MjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJEMTMwOEYyMjFD
RTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsg
cGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MDFGQTNFMzFDMDAy
NkE1NDUgLyogU291cmNlc0NvY29hLnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTb3VyY2Vz
Q29jb2EudHh0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc3MSw2ICszNzc1LDcg
QEAKIAkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0MzkxRjhDMEFDNzAwOTIzMkFFIC8qIFN0cnVj
dHVyZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0
cnVjdHVyZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRml4ZWRBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNG
aXhlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNQQ1RvT3JpZ2luTWFwLmg7IHBhdGggPSBiMy9CM1BDVG9PcmlnaW5NYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5OTEsNiArNTk5Niw3IEBACiAJCQkJQzJD
RjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLywKIAkJCQkx
NDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCAqLywKIAkJCQkxNDI3MTEzODBB
NDYwQkJCMDA4MEVFRUEgLyogSlNCYXNlLmggKi8sCisJCQkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2
OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi8sCiAJCQkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdE
IC8qIEpTQmFzZVByaXZhdGUuaCAqLywKIAkJCQkxNDQwRjhBRDBBNTA4RDIwMDAwNUYwNjEgLyog
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQkxNDQwRjhBQzBBNTA4RDIwMDAwNUYw
NjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmggKi8sCkBAIC02MzM1LDYgKzYzNDEsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1M0MzRDVFNDIxRUNFNkNF
MDA4N0ZERkMgLyogYmFzaWMuanMgKi8sCisJCQkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8q
IGZvby5qcyAqLywKIAkJCSk7CiAJCQluYW1lID0gdGVzdGFwaVNjcmlwdHM7CiAJCQlwYXRoID0g
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzOwpAQCAtOTc1MCw2ICs5NzU3LDcgQEAKIAkJCQkwRkY0
Mjc0ODE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3NDkxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdFNUFCMzkxNzk5RTRCMjAwRDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAv
KiBVaW50MTZXaXRoRnJhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQyMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjQxNzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5MSw3ICsxOTEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9uS2luZCwgQ29uc3RydWN0QWJpbGl0eSwgSlNQ
YXJzZXJTY3JpcHRNb2RlLCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSwgIEpTQzo6RGVyaXZl
ZENvbnRleHRUeXBlLCBib29sIGlzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yKTsKLSAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYpOworICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKERlY29kZXImLCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSwgY29uc3Qg
Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9m
ZnNldDsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNDE3
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw5IEBAIHByaXZhdGU6CiBjbGFzcyBDb21w
YWN0VmFyaWFibGVFbnZpcm9ubWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQpOworCisg
ICAgZnJpZW5kIGNsYXNzIENhY2hlZENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50OworCiBwdWJs
aWM6CiAgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQoY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCYpOwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdG9WYXJpYWJsZUVudmlyb25tZW50KCkg
Y29uc3Q7CkBAIC0xMzMsNiArMTM2LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IHJldHVybiBtX2hhc2g7IH0KIAogcHJpdmF0ZToKKyAgICBDb21wYWN0VmFyaWFibGVF
bnZpcm9ubWVudCgpID0gZGVmYXVsdDsKKwogICAgIFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmlu
Z0ltcGw+PiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8VmFyaWFibGVFbnZpcm9ubWVudEVudHJ5
PiBtX3ZhcmlhYmxlTWV0YWRhdGE7CiAgICAgdW5zaWduZWQgbV9oYXNoOwpAQCAtMTc0LDYgKzE3
OSw4IEBAIHN0cnVjdCBDb21wYWN0VmFyaWFibGVNYXBLZXkgewogICAgIH0KIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ29tcGFjdFZhcmlhYmxlTWFwS2V5OworCiAgICAgQ29t
cGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIG1fZW52aXJvbm1lbnQ7CiB9OwogCkBAIC0yMDIsOCAr
MjA5LDEyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpDb21wYWMKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb21wYWN0VmFyaWFibGVNYXAgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDb21wYWN0VmFyaWFibGVNYXA+IHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQ29tcGFjdFZh
cmlhYmxlTWFwOworCiBwdWJsaWM6CiAgICAgY2xhc3MgSGFuZGxlIHsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIENhY2hlZENvbXBhY3RWYXJpYWJsZU1hcEhhbmRsZTsKKwogICAgIHB1YmxpYzoKICAg
ICAgICAgSGFuZGxlKCkgPSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNSw5ICsyMTUsMTAgQEAgY2xhc3MgRGVjb2RlciB7CiAgICAgV1RGX0ZPUkJJRF9IRUFQX0FM
TE9DQVRJT047CiAKIHB1YmxpYzoKLSAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFz
ZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgIERlY29kZXIoVk0mIHZtLCBjb25zdCB2b2lkKiBi
YXNlQWRkcmVzcywgc2l6ZV90IHNpemUsIFVSTCYmIHNvdXJjZVVSTE92ZXJyaWRlKQogICAgICAg
ICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCisgICAgICAgICwgbV9zb3VyY2VVUkxPdmVycmlk
ZShXVEZNb3ZlKHNvdXJjZVVSTE92ZXJyaWRlKSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwg
bV9zaXplKHNpemUpCiAjZW5kaWYKQEAgLTI1OSw5ICsyNjAsMTIgQEAgcHVibGljOgogICAgICAg
ICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwgZm4pOwogICAgIH0KIAorICAgIGNvbnN0IFVSTCYg
c291cmNlVVJMT3ZlcnJpZGUoKSB7IHJldHVybiBtX3NvdXJjZVVSTE92ZXJyaWRlOyB9CisKIHBy
aXZhdGU6CiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgdWludDhfdCogbV9iYXNlQWRkcmVzczsK
KyAgICBVUkwgbV9zb3VyY2VVUkxPdmVycmlkZTsKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90
IG1fc2l6ZTsKICNlbmRpZgpAQCAtODc4LDYgKzg4Miw5OCBAQCBwcml2YXRlOgogICAgIENhY2hl
ZEhhc2hNYXA8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgVmFyaWFibGVF
bnZpcm9ubWVudEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+PiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5SGFzaFRyYWl0cz4gbV9t
YXA7CiB9OwogCitjbGFzcyBDYWNoZWRDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCA6IHB1Ymxp
YyBDYWNoZWRPYmplY3Q8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQ+IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb21wYWN0VmFyaWFibGVFbnZp
cm9ubWVudCYgZW52KQorICAgIHsKKyAgICAgICAgbV92YXJpYWJsZXMuZW5jb2RlKGVuY29kZXIs
IGVudi5tX3ZhcmlhYmxlcyk7CisgICAgICAgIG1fdmFyaWFibGVNZXRhZGF0YS5lbmNvZGUoZW5j
b2RlciwgZW52Lm1fdmFyaWFibGVNZXRhZGF0YSk7CisgICAgICAgIG1faGFzaCA9IGVudi5tX2hh
c2g7CisgICAgICAgIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgPSBlbnYubV9pc0V2ZXJ5dGhpbmdD
YXB0dXJlZDsKKyAgICB9CisKKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb21w
YWN0VmFyaWFibGVFbnZpcm9ubWVudCYgZW52KSBjb25zdAorICAgIHsKKyAgICAgICAgbV92YXJp
YWJsZXMuZGVjb2RlKGRlY29kZXIsIGVudi5tX3ZhcmlhYmxlcyk7CisgICAgICAgIG1fdmFyaWFi
bGVNZXRhZGF0YS5kZWNvZGUoZGVjb2RlciwgZW52Lm1fdmFyaWFibGVNZXRhZGF0YSk7CisgICAg
ICAgIGVudi5tX2hhc2ggPSBtX2hhc2g7CisgICAgICAgIGVudi5tX2lzRXZlcnl0aGluZ0NhcHR1
cmVkID0gbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKKyAgICB9CisKKyAgICBDb21wYWN0VmFyaWFi
bGVFbnZpcm9ubWVudCogZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCogZW52ID0gbmV3IENvbXBhY3RWYXJpYWJs
ZUVudmlyb25tZW50OworICAgICAgICBkZWNvZGUoZGVjb2RlciwgKmVudik7CisgICAgICAgIHJl
dHVybiBlbnY7CisgICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZFZlY3RvcjxDYWNoZWRSZWZQ
dHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+PiBtX3ZhcmlhYmxlczsKKyAgICBDYWNoZWRWZWN0
b3I8VmFyaWFibGVFbnZpcm9ubWVudEVudHJ5PiBtX3ZhcmlhYmxlTWV0YWRhdGE7CisgICAgdW5z
aWduZWQgbV9oYXNoOworICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKK307CisKK2Ns
YXNzIENhY2hlZENvbXBhY3RWYXJpYWJsZU1hcEtleSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8Q29t
cGFjdFZhcmlhYmxlTWFwS2V5PiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5JiBrZXkpCisgICAgeworICAgICAg
ICBtX2Vudmlyb25tZW50LmVuY29kZShlbmNvZGVyLCBrZXkubV9lbnZpcm9ubWVudCk7CisgICAg
fQorCisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29tcGFjdFZhcmlhYmxlTWFw
S2V5JiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBrZXkubV9lbnZpcm9ubWVudCA9IG1fZW52
aXJvbm1lbnQuZGVjb2RlKGRlY29kZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWNoZWRQ
dHI8Q2FjaGVkQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQ+IG1fZW52aXJvbm1lbnQ7Cit9Owor
CitjbGFzcyBDYWNoZWRDb21wYWN0VmFyaWFibGVNYXAgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENv
bXBhY3RWYXJpYWJsZU1hcD4geworcHVibGljOgorICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IENvbXBhY3RWYXJpYWJsZU1hcCYgbWFwKQorICAgIHsKKyAgICAgICAgbV9t
YXAuZW5jb2RlKGVuY29kZXIsIG1hcC5tX21hcCk7CisgICAgfQorCisgICAgdm9pZCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgQ29tcGFjdFZhcmlhYmxlTWFwJiBtYXApIGNvbnN0CisgICAgewor
ICAgICAgICBtX21hcC5kZWNvZGUoZGVjb2RlciwgbWFwLm1fbWFwKTsKKyAgICB9CisKKyAgICBD
b21wYWN0VmFyaWFibGVNYXAqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgQ29tcGFjdFZhcmlhYmxlTWFwKiBtYXAgPSBuZXcgQ29tcGFjdFZhcmlhYmxlTWFw
OworICAgICAgICBkZWNvZGUoZGVjb2RlciwgKm1hcCk7CisgICAgICAgIHJldHVybiBtYXA7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIENhY2hlZEhhc2hNYXA8Q2FjaGVkQ29tcGFjdFZhcmlhYmxl
TWFwS2V5LCB1bnNpZ25lZD4gbV9tYXA7Cit9OworCitjbGFzcyBDYWNoZWRDb21wYWN0VmFyaWFi
bGVNYXBIYW5kbGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0PENvbXBhY3RWYXJpYWJsZU1hcDo6SGFu
ZGxlPiB7CitwdWJsaWM6CisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUmIGhhbmRsZSkKKyAgICB7CisgICAgICAgIG1fZW52
aXJvbm1lbnQuZW5jb2RlKGVuY29kZXIsIGhhbmRsZS5tX2Vudmlyb25tZW50KTsKKyAgICAgICAg
bV9tYXAuZW5jb2RlKGVuY29kZXIsIGhhbmRsZS5tX21hcCk7CisgICAgfQorCisgICAgQ29tcGFj
dFZhcmlhYmxlTWFwOjpIYW5kbGUgZGVjb2RlKERlY29kZXImIGRlY29kZXIpIGNvbnN0CisgICAg
eworICAgICAgICBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgIGhh
bmRsZS5tX2Vudmlyb25tZW50ID0gbV9lbnZpcm9ubWVudC5kZWNvZGUoZGVjb2Rlcik7CisgICAg
ICAgIGhhbmRsZS5tX21hcCA9IG1fbWFwLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkUHRyPENhY2hlZENvbXBhY3RW
YXJpYWJsZUVudmlyb25tZW50PiBtX2Vudmlyb25tZW50OworICAgIENhY2hlZFJlZlB0cjxDYWNo
ZWRDb21wYWN0VmFyaWFibGVNYXA+IG1fbWFwOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KIGNsYXNzIENhY2hlZEFycmF5IDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZSo+IHsKIHB1YmxpYzoKQEAgLTEzMDEsMTAg
KzEzOTcsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU3RyaW5nIGRlY29kZWRTb3VyY2Ug
PSBtX3NvdXJjZS5kZWNvZGUoZGVjb2Rlcik7CiAgICAgICAgIFNvdXJjZU9yaWdpbiBkZWNvZGVk
U291cmNlT3JpZ2luID0gbV9zb3VyY2VPcmlnaW4uZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBT
dHJpbmcgZGVjb2RlZFVSTCA9IG1fdXJsLmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgU3RyaW5n
IGRlY29kZWRVUkxTdHJpbmcgPSBtX3VybC5kZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIFVSTCBz
b3VyY2VVUkw7CisgICAgICAgIGlmIChkZWNvZGVyLnNvdXJjZVVSTE92ZXJyaWRlKCkpIHsKKyAg
ICAgICAgICAgIGRlY29kZWRTb3VyY2VPcmlnaW4gPSBTb3VyY2VPcmlnaW4geyBkZWNvZGVyLnNv
dXJjZVVSTE92ZXJyaWRlKCkgfTsKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IGRlY29kZXIuc291
cmNlVVJMT3ZlcnJpZGUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2VVUkwg
PSBVUkwoVVJMKCksIGRlY29kZWRVUkxTdHJpbmcpOwogICAgICAgICBUZXh0UG9zaXRpb24gZGVj
b2RlZFN0YXJ0UG9zaXRpb24gPSBtX3N0YXJ0UG9zaXRpb24uZGVjb2RlKGRlY29kZXIpOwogCi0g
ICAgICAgIFJlZjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBTdHJpbmdT
b3VyY2VQcm92aWRlcjo6Y3JlYXRlKGRlY29kZWRTb3VyY2UsIGRlY29kZWRTb3VyY2VPcmlnaW4s
IFVSTChVUkwoKSwgZGVjb2RlZFVSTCksIGRlY29kZWRTdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBl
KTsKKyAgICAgICAgUmVmPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IFN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoZGVjb2RlZFNvdXJjZSwgZGVjb2RlZFNvdXJjZU9y
aWdpbiwgV1RGTW92ZShzb3VyY2VVUkwpLCBkZWNvZGVkU3RhcnRQb3NpdGlvbiwgc291cmNlVHlw
ZSk7CiAgICAgICAgIEJhc2U6OmRlY29kZShkZWNvZGVyLCBzb3VyY2VQcm92aWRlci5nZXQoKSk7
CiAgICAgICAgIHJldHVybiAmc291cmNlUHJvdmlkZXIubGVha1JlZigpOwogICAgIH0KQEAgLTE1
MTcsNyArMTYxOSw3IEBAIHByaXZhdGU6CiAgICAgQ2FjaGVkSWRlbnRpZmllciBtX2VjbWFOYW1l
OwogICAgIENhY2hlZElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CiAKLSAgICBDYWNoZWRWYXJp
YWJsZUVudmlyb25tZW50IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CisgICAgQ2FjaGVkQ29t
cGFjdFZhcmlhYmxlTWFwSGFuZGxlIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CiAKICAgICBD
YWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsOwogICAgIENhY2hlZFdyaXRl
QmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
az4gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAgLTE4NTIsNyArMTk1NCw3IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGEKICAgICBtX2VjbWFOYW1l
LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmVjbWFOYW1lKCkpOwogICAgIG1faW5mZXJyZWRO
YW1lLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLmluZmVycmVkTmFtZSgpKTsKIAotICAgIG1f
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW5jb2RlKGVuY29kZXIsIGV4ZWN1dGFibGUucGFyZW50
U2NvcGVURFpWYXJpYWJsZXMoKSk7CisgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbmNv
ZGUoZW5jb2RlciwgZXhlY3V0YWJsZS5tX3BhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKIAogICAg
IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKICAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0LmVuY29kZShlbmNvZGVyLCBleGVjdXRhYmxlLm1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOwpAQCAtMTg2MCwxMCArMTk2Miw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNo
ZWRGdW5jdGlvbkV4ZWN1dGEKIAogQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlcikg
Y29uc3QKIHsKLSAgICBWYXJpYWJsZUVudmlyb25tZW50IGVudjsKLSAgICBtX3BhcmVudFNjb3Bl
VERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVyLCBlbnYpOwotCi0gICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsKKyAgICBDb21wYWN0VmFyaWFibGVN
YXA6OkhhbmRsZSBlbnYgPSBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLmRlY29kZShkZWNvZGVy
KTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVyLnZt
KCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGRlY29kZXIsIFdURk1vdmUoZW52
KSwgKnRoaXMpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7
CiAKICAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0
YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwsIGV4ZWN1dGFibGUpOwpAQCAtMTg3Miw3
ICsxOTcyLDcgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZQogICAg
IHJldHVybiBleGVjdXRhYmxlOwogfQogCi1BTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZWNvZGVyLCBW
YXJpYWJsZUVudmlyb25tZW50JiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgY29uc3QgQ2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlJiBjYWNoZWRFeGVjdXRhYmxlKQorQUxXQVlTX0lOTElORSBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2Rl
ciYgZGVjb2RlciwgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMsIGNvbnN0IENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZSYgY2FjaGVkRXhlY3V0YWJsZSkK
ICAgICA6IEJhc2UoZGVjb2Rlci52bSgpLCBkZWNvZGVyLnZtKCkudW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2ZpcnN0TGluZU9mZnNldChjYWNoZWRF
eGVjdXRhYmxlLmZpcnN0TGluZU9mZnNldCgpKQogICAgICwgbV9saW5lQ291bnQoY2FjaGVkRXhl
Y3V0YWJsZS5saW5lQ291bnQoKSkKQEAgLTE5MDIsNyArMjAwMiw3IEBAIEFMV0FZU19JTkxJTkUg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUKICAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0
YWJsZS5lY21hTmFtZShkZWNvZGVyKSkKICAgICAsIG1faW5mZXJyZWROYW1lKGNhY2hlZEV4ZWN1
dGFibGUuaW5mZXJyZWROYW1lKGRlY29kZXIpKQogCi0gICAgLCBtX3BhcmVudFNjb3BlVERaVmFy
aWFibGVzKGRlY29kZXIudm0oKS5tX2NvbXBhY3RWYXJpYWJsZU1hcC0+Z2V0KHBhcmVudFNjb3Bl
VERaVmFyaWFibGVzKSkKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoV1RGTW92ZShw
YXJlbnRTY29wZVREWlZhcmlhYmxlcykpCiAKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkRXhlY3V0
YWJsZS5yYXJlRGF0YShkZWNvZGVyKSkKIHsKQEAgLTIwODAsMTkgKzIxODAsMjQgQEAgc3RkOjpw
YWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbgogICAgIHJldHVybiBlbmNvZGVyLnJl
bGVhc2UoKTsKIH0KIAotVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IHNpemUpCitVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSwg
VVJMJiYgc291cmNlVVJMT3ZlcnJpZGUpCiB7CiAgICAgY29uc3QgYXV0byogY2FjaGVkRW50cnkg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4oYnVmZmVyKTsKLSAg
ICBEZWNvZGVyIGRlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAgRGVjb2RlciBkZWNvZGVy
KHZtLCBidWZmZXIsIHNpemUsIFdURk1vdmUoc291cmNlVVJMT3ZlcnJpZGUpKTsKICAgICBzdGQ6
OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKICAgICB7CiAg
ICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgaWYgKCFjYWNoZWRFbnRy
eS0+ZGVjb2RlKGRlY29kZXIsIGVudHJ5KSkKKyAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS0+ZGVj
b2RlKGRlY29kZXIsIGVudHJ5KSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJjYW4ndCBkZWNv
ZGUgY29kZWJsb2NrIDEhIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChlbnRyeS5maXJzdCAhPSBrZXkpCisgICAgaWYgKGVudHJ5LmZp
cnN0ICE9IGtleSkgeworICAgICAgICBkYXRhTG9nTG4oImNhbid0IGRlY29kZSBjb2RlYmxvY2sg
MiEiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGRhdGFMb2dMbigiUmV0
dXJuaW5nIGRlY29kZWQgQ29kZUJsb2NrIik7CiAgICAgcmV0dXJuIGVudHJ5LnNlY29uZDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCShy
ZXZpc2lvbiAyNDE3NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJKU0Nh
c3QuaCIKICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQsMTMgKzM1LDEzIEBAIGNsYXNzIFNvdXJjZUNvZGVL
ZXk7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50
OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5Jiwg
Y29uc3QgVW5saW5rZWRDb2RlQmxvY2sqKTsKLVVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2Rl
QmxvY2tJbXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
OworVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBTb3Vy
Y2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCwgVVJMJiYpOwogCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogZGVj
b2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lk
KiBidWZmZXIsIHNpemVfdCBzaXplKQorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2Rl
QmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IHNpemUsIFVSTCYmIHNvdXJjZVVSTE92ZXJyaWRlID0gVVJMKCkpCiB7Ci0gICAg
cmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihkZWNvZGVDb2RlQmxvY2tJbXBs
KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSkpOworICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlKj4oZGVjb2RlQ29kZUJsb2NrSW1wbCh2bSwga2V5LCBidWZmZXIsIHNpemUsIFdU
Rk1vdmUoc291cmNlVVJMT3ZlcnJpZGUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362473</attachid>
            <date>2019-02-19 19:46:15 -0800</date>
            <delta_ts>2019-02-20 17:51:12 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>52205</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTc4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQg
KnNjcmlwdCk7CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCwxMCBAQAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2lt
cG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgi
CiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2
ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAi
SlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJK
U1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTc0LDEzICs3NiwyMiBAQCBJZGVudGlmaWVyIEpTQVBJR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkCiAgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIEFTU0VSVChr
ZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNTeW1ib2woKSk7CiAgICAgU3RyaW5nIG5hbWUgPSAga2V5
LnRvV1RGU3RyaW5nKGV4ZWMpOworICAgIGRhdGFMb2dMbigicmVzb2x2aW5nICciLCBuYW1lLCAi
JyIpOwogCi0gICAgVVJMIHJlZmVycmVyVVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZl
cnJlciktPnRyeUdldFZhbHVlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlz
VmFsaWQoKSk7Ci0KLSAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKLSAgICBp
ZiAodXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgdXJsKTsKKyAgICBpZiAoSlNTdHJpbmcqIHJlZmVycmVyU3RyaW5nID0ganNEeW5hbWlj
Q2FzdDxKU1N0cmluZyo+KHZtLCByZWZlcnJlcikpIHsKKyAgICAgICAgVVJMIHJlZmVycmVyVVJM
KFVSTCgpLCByZWZlcnJlclN0cmluZy0+dmFsdWUoZXhlYykpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOworCisgICAgICAgIFVSTCB1cmwgPSBVUkwocmVm
ZXJyZXJVUkwsIG5hbWUpOworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJyZXNvbHZlZCB0bzogJyIsIHVybC5zdHJpbmcoKSwgIiciKTsKKyAgICAg
ICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBVUkwgdXJsID0gVVJMKFVSTCgpLCBuYW1lKTsKKyAg
ICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIH0KIAogICAgIHRocm93Vk1FcnJvcihleGVjLCBz
Y29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlkIFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2Ui
X3MpOwogICAgIHJldHVybiB7IH07CkBAIC0xNjIsOSArMTczLDkgQEAgSlNJbnRlcm5hbFByb21p
c2UqIEpTQVBJR2xvYmFsT2JqZWN0OjptbwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVj
dChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiTm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7
CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3Ry
aW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJl
c29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwg
InJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSogZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1
cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRoYXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUg
a2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxD
b250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAg
ICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpKTsKIApAQCAtMTc1LDcgKzE4NiwzMCBAQCBKU0ludGVybmFsUHJvbWlzZSog
SlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNT
Y3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU2Ny
aXB0KiBqc1NjcmlwdCA9IHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCk7CisKKyAgICAg
ICAgSlNTb3VyY2VDb2RlKiBzb3VyY2UgPSBbanNTY3JpcHQganNTb3VyY2VDb2RlXTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKFtqc1NjcmlwdCB0eXBlXSAhPSBrSlNTY3JpcHRUeXBlTW9kdWxlKSkg
eworICAgICAgICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJp
bmcoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBwcm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0ZWQg
dHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxlLiIpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMs
IGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhp
cyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1VuZGVmaW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBTUEkgd2Un
cmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1aXJlIHNvdXJjZVVSTCwgc28gd2UganVzdAorICAg
ICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBmb3Igc3VjaCB1c2UgY2FzZXMgdW50aWwgd2UgY2Fu
IHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAgICAgICAvLyB3ZSBkbyB0aGF0LCB3ZSBjYW4gcmVt
b3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3VyY2VVUkw6CisgICAgICAgIGlmIChOU1VSTCAqc291
cmNlVVJMID0gW2pzU2NyaXB0IHNvdXJjZVVSTF0pIHsKKyAgICAgICAgICAgIFN0cmluZyBvbGRN
b2R1bGVLZXkgeyBbc291cmNlVVJMIGFic29sdXRlU3RyaW5nXSB9OworICAgICAgICAgICAgZGF0
YUxvZ0xuKCJvbGQga2V5PSIsIG9sZE1vZHVsZUtleSwgIiBuZXdLZXk9IiwgbW9kdWxlS2V5KTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xk
TW9kdWxlS2V5KSAhPSBtb2R1bGVLZXkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJy
ZWplY3RpbmcgYmVjYXVzZSBvbGQga2V5ICE9IG5ld0tleSIpOworICAgICAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1Nj
cmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3Vz
bHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKSk7
CisgICAgICAgICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURl
ZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBhcmdzLmFwcGVuZChzb3VyY2UpOwogICAgICAgICBj
YWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwg
YXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpAQCAtMjEwLDYgKzI0NCwyMiBAQCBKU09iamVj
dCogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlCiAgICAgcmV0dXJuIG1ldGFQcm9wZXJ0
aWVzOwogfQogCitKU1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1Nj
cmlwdE1vZHVsZShjb25zdCBKU0xvY2tIb2xkZXImLCBKU1NjcmlwdCAqc2NyaXB0KQoreworICAg
IEFTU0VSVChzY3JpcHQudHlwZSA9PSBrSlNTY3JpcHRUeXBlTW9kdWxlKTsKKyAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIC8vYXV0byBrZXkgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgW1tzY3JpcHQg
c291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10pOworICAgIGF1dG8ga2V5ID0gU3RyaW5nIHsgW1tz
Y3JpcHQgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfTsKKyAgICBKU0ludGVybmFsUHJvbWlz
ZSogcHJvbWlzZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShnbG9iYWxFeGVjKCksIGtleSwganNV
bmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUo
Z2xvYmFsRXhlYygpLCB0aGlzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgIHJlc3VsdC0+cmVzb2x2ZShnbG9iYWxFeGVjKCksIHByb21pc2UpOworICAgIHJldHVy
biByZXN1bHQtPnByb21pc2UoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VO
QUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDI0
MTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNCYXNlLmgiCisjaW5jbHVkZSAiSlNCYXNlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU0Jhc2VQ
cml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCkBAIC00NywyNSArNDgsMTUgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29u
dGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
SlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCitKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBK
U0xvY2tIb2xkZXImLCBFeGVjU3RhdGUqIGV4ZWMsIEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewotICAgIGlmICghY3R4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
dHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisgICAgVU5VU0VEX1BBUkFNKGN0eCk7CiAKICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0
ID0gdG9KUyh0aGlzT2JqZWN0KTsKIAotICAgIHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4
KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0KICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0
byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBpcyBOVUxMCisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9i
amVjdChleGVjKTsKLSAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJj
ZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKLSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VT
b3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0s
IFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7Ci0K
ICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNWYWx1
ZSByZXR1cm5WYWx1ZSA9IHByb2ZpbGVkRXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIFByb2ZpbGluZ1JlYXNvbjo6QVBJLCBzb3VyY2UsIGpzVGhpc09iamVjdCwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CiAKQEAgLTgwLDcgKzcxLDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2Ny
aXB0KEpTQ29udGV4dFJlZgogICAgICAgICAvLyBXZSBjb3VsZCBzdGFzaCBpdCBpbiB0aGUgaW5z
cGVjdG9yIGluIGNhc2UgYW4gaW5zcGVjdG9yIGlzIGV2ZXIgb3BlbmVkLgogICAgICAgICBnbG9i
YWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywg
ZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChyZXR1cm5WYWx1ZSkKQEAgLTkwLDYg
KzgxLDI0IEBAIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICBy
ZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmluZWQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmICghY3R4KSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICBzdGFydGluZ0xpbmVOdW1iZXIg
PSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVOdW1iZXIpOworCisgICAgYXV0byBzb3VyY2VVUkxT
dHJpbmcgPSBzb3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCk7CisgICAg
U291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9y
aWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBVUkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0
UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJl
ciksIE9yZGluYWxOdW1iZXIoKSkpOworCisgICAgcmV0dXJuIEpTRXZhbHVhdGVTY3JpcHRJbnRl
cm5hbChsb2NrZXIsIGV4ZWMsIGN0eCwgdGhpc09iamVjdCwgc291cmNlLCBleGNlcHRpb24pOwor
fQorCiBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdS
ZWYgc2NyaXB0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBpZiAoIWN0eCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2Uu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XZWJLaXRBdmFpbGFiaWxpdHkuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CitjbGFzcyBKU0xvY2tIb2xkZXI7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisK
K2V4dGVybiAiQyIgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0SW50ZXJuYWwoY29uc3QgSlND
OjpKU0xvY2tIb2xkZXImLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lv
biAyNDE3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1w
b3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2ltcG9ydCAi
SlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpT
Q29udGV4dFByaXZhdGUuaCIKQEAgLTEwMywxNyArMTA0LDQ2IEBAIC0gKEpTVmFsdWUgKilldmFs
dWF0ZVNjcmlwdDooTlNTdHJpbmcgKikKICAgICByZXR1cm4gW3NlbGYgZXZhbHVhdGVTY3JpcHQ6
c2NyaXB0IHdpdGhTb3VyY2VVUkw6bmlsXTsKIH0KIAotLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmlwdCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTAor
c3RhdGljIEpTVmFsdWUgKmV2YWx1YXRlU2NyaXB0KEpTQ29udGV4dCAqY29udGV4dCwgUmVmUHRy
PE9wYXF1ZUpTU3RyaW5nPiBzb3VyY2UsIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gdXJsKQogewog
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOworICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LT5tX2NvbnRleHQsIHNvdXJjZS5nZXQo
KSwgbnVsbHB0ciwgdXJsLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworCisgICAgaWYgKGV4
Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNW
YWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU1ZhbHVlICopZXZh
bHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291
cmNlVVJMCit7CiAgICAgYXV0byBzY3JpcHRKUyA9IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUo
c2NyaXB0KTsKICAgICBhdXRvIHNvdXJjZVVSTEpTID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0
ZShbc291cmNlVVJMIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBK
U0V2YWx1YXRlU2NyaXB0KG1fY29udGV4dCwgc2NyaXB0SlMuZ2V0KCksIG51bGxwdHIsIHNvdXJj
ZVVSTEpTLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworICAgIHJldHVybiBldmFsdWF0ZVNj
cmlwdChzZWxmLCBzY3JpcHRKUywgc291cmNlVVJMSlMpOworfQogCi0gICAgaWYgKGV4Y2VwdGlv
blZhbHVlKQotICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvblZhbHVlXTsKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAq
KXNjcmlwdAoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOwor
ICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOworCisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtKSB7
CisgICAgICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IFtzY3JpcHQganNTb3VyY2VDb2RlXTsKIAot
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBpbkNvbnRleHQ6
c2VsZl07CisKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51bGxwdHI7Cisg
ICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tl
ciwgZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBqc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwg
JmV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVl
XTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGlu
Q29udGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6Ompz
RHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9iamVjdCo+KHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVjdGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IG1vZHVs
ZSBsb2FkaW5nIiBpbkNvbnRleHQ6c2VsZl0gaW5Db250ZXh0OnNlbGZdOworCisgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYodm0sIGdsb2JhbE9iamVjdC0+bG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUobG9ja2VyLCBzY3JpcHQpKSBpbkNvbnRleHQ6c2Vs
Zl07CiB9CiAKIC0gKHZvaWQpc2V0RXhjZXB0aW9uOihKU1ZhbHVlICopdmFsdWUKQEAgLTMwMCw2
ICszMzAsMTEgQEAgLSAoQk9PTClib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1ZQogICAg
IHJldHVybiBOTzsKIH0KIAorLSAoSlNWYWx1ZSAqKXZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbldp
dGhTdHJpbmc6KFN0cmluZyYpc3RyaW5nCit7CisgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5v
dGlmeUV4Y2VwdGlvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOnN0cmlu
ZyBpbkNvbnRleHQ6c2VsZl0uSlNWYWx1ZVJlZl07Cit9CisKIC0gKHZvaWQpYmVnaW5DYWxsYmFj
a1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGEgY2FsbGVlVmFsdWU6KEpTVmFs
dWVSZWYpY2FsbGVlVmFsdWUgdGhpc1ZhbHVlOihKU1ZhbHVlUmVmKXRoaXNWYWx1ZSBhcmd1bWVu
dENvdW50OihzaXplX3QpYXJndW1lbnRDb3VudCBhcmd1bWVudHM6KGNvbnN0IEpTVmFsdWVSZWYg
Kilhcmd1bWVudHMKIHsKICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHJl
dmlzaW9uIDI0MTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJp
dmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBU
aGUgZGVsZWdhdGUgdGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1v
ZHVsZS4gTm90ZSwgdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJl
dHVybmVkIGJ5IFVJV2ViVmlldy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8
SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBt
ZXRob2QKKyBAYWJzdHJhY3QgUnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNT
Y3JpcHQgdG8gZXZhbHVhdGUuCisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0
IHdhcyBjcmVhdGVkIHdpdGggSlNTY3JpcHRUeXBlUHJvZ3JhbSwgdGhlIHNjcmlwdCB3aWxsIHJ1
biBzeW5jaHJvbm91c2x5IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uLgorCisg
T3RoZXJ3aXNlLCBpZiB0aGUgc2NyaXB0IHdhcyBjcmVhdGVkIHdpdGggSlNTY3JpcHRUeXBlTW9k
dWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgcnVuIGFzeW5jaHJvbm91c2x5IGFuZCB3aWxsIHJldHVy
biBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbW9kdWxlIGFuZCBhbnkgdHJhbnNpdGl2ZSBk
ZXBlbmRlbmNpZXMgYXJlIGxvYWRlZC4gVGhlIG1vZHVsZSBsb2FkZXIgd2lsbCB0cmVhdCB0aGUg
c2NyaXB0IGFzIGlmIGl0IGhhZCBiZWVuIHJldHVybmVkIGZyb20gYSBkZWxlZ2F0ZSBjYWxsIHRv
IG1vZHVsZUxvYWRlckRlbGVnYXRlLiBUaGlzIG1pcnJvcnMgdGhlIEphdmFTY3JpcHQgZHluYW1p
YyBpbXBvcnQgb3BlcmF0aW9uLgorICovCistIChKU1ZhbHVlICopZXZhbHVhdGVKU1NjcmlwdDoo
SlNTY3JpcHQgKilzY3JpcHQ7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5oCShyZXZpc2lvbiAyNDE3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDE4IEBAIE5T
X0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOwogCisvKiEK
KyBAZW51bSBKU1NjcmlwdFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29uc3RhbnQgaWRlbnRpZnlp
bmcgdGhlIGV4ZWN1dGlvbiB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNvbnN0YW50ICAgICBrSlNT
Y3JpcHRUeXBlUHJvZ3JhbSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBwcm9ncmFt
LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRoZSB0eXBlIG9mIGEgbW9k
dWxlIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
SlNTY3JpcHRUeXBlKSB7CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0sCisgICAga0pTU2NyaXB0
VHlwZU1vZHVsZSwKK307CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19U
QkEpLCBpb3MoSlNDX0lPU19UQkEpKQogQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CiAK
QEAgLTQxLDcgKzUzLDcgQEAgSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEp
LAogIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFs
dWF0ZWQgaW4uCiAgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1h
Y2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlz
Y3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gLypKU0NfQVBJX0RFUFJFQ0FURUQobWFjb3N4KEpTQ19NQUNfVEJB
KSwgaW9zKEpTQ19JT1NfVEJBKSkqLzsKIAogLyohCiAgQG1ldGhvZApAQCAtNTUsMTMgKzY3LDQz
IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwKIAogIElmIHRoZSBm
aWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwu
CiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VS
TCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRo
Q29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2Rl
Q2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOwotCisrIChudWxsYWJsZSBpbnN0YW5j
ZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VS
TCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNh
Y2hlUGF0aCAvKkpTQ19BUElfREVQUkVDQVRFRChtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlND
X0lPU19UQkEpKSovOwogCiAvKiEKICBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIGVxdWl2YWxl
bnQgdG8gc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmlu
ZzphbmRCeXRlY29kZUNhY2hlOi4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlw
dEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1
YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWdu
aW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKysg
KG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBh
dGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmlu
ZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVs
bGFibGUgTlNVUkwgKiljYWNoZVBhdGggLypKU0NfQVBJX0RFUFJFQ0FURUQobWFjb3N4KEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkqLzsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFj
dCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUuCisg
QHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2UuCisgQHBhcmFtIHZtIFRo
ZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KKyBAcGFy
YW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc2NyaXB0
LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50aWZpZXIuCisgQHBhcmFtIHNv
dXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNlIHdoZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQg
YnkgdGhlIEpTIHZtLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0
aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJh
bSBlcnJvciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVh
dGVkIGlmIHRoZSByZXN1bHQgaXMgbmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8K
KysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBl
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoU291cmNlVVJMOihO
U1VSTCAqKXNvdXJjZVVSTCBhbmRTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuZEJ5dGVjb2Rl
Q2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqIF9O
dWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBD
cmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBh
IHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0gdHlw
ZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KKyBAcGFyYW0gdm0gVGhlIEpTVmlydHVh
bE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBmaWxlUGF0
aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgSlMgc291cmNlIGNvZGUgZmlsZSBvbiBk
aXNrLgorIEBwYXJhbSBzb3VyY2VVUkwgVGhlIHNvdXJjZSBVUkwgdG8gYXNzb2NpYXRlIHdpdGgg
dGhpcyBzY3JpcHQuIEZvciBtb2R1bGVzLCB0aGlzIGlzIHRoZSBtb2R1bGUgaWRlbnRpZmllci4K
KyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZN
IHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNj
cmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVz
dWx0IGlzIG5pbC4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIFRoZSBm
aWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBt
b2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gVGhpcyBtZXRob2Qgd2lsbCBmaWxlIGJh
Y2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KKworIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRo
IGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBuaWwuCisgKi8KKysgKG51bGxh
YmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVh
bE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxl
OihOU1VSTCAqKWZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJv
ciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKKworLSAoQk9PTCljYWNoZUJ5dGVjb2Rl
V2l0aEVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAog
QGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHJldmlzaW9u
IDI0MTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM2LDEyICszNiwxNiBAQAogI2ltcG9ydCAiUGFyc2VyRXJyb3IuaCIKICNp
bXBvcnQgIlN5bWJvbC5oIgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBpbXBsZW1lbnRhdGlv
biBKU1NjcmlwdCB7CiAgICAgX193ZWFrIEpTVmlydHVhbE1hY2hpbmUqIG1fdmlydHVhbE1hY2hp
bmU7CisgICAgSlNTY3JpcHRUeXBlIG1fdHlwZTsKKyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSBtX21hcHBlZFNvdXJjZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgUmV0YWluUHRy
PE5TVVJMPiBtX3NvdXJjZVVSTDsKICAgICBSZXRhaW5QdHI8TlNVUkw+IG1fY2FjaGVQYXRoOwog
ICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsKICAgICBKU0M6OlN0cm9u
ZzxKU0M6OkpTU291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7CkBAIC01Myw2ICs1Nyw3IEBAICsg
KGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmkKICAgICBKU1NjcmlwdCAqcmVz
dWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKICAgICByZXN1bHQt
Pm1fc291cmNlID0gc291cmNlOwogICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwor
ICAgIHJlc3VsdC0+bV90eXBlID0ga0pTU2NyaXB0VHlwZU1vZHVsZTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0xMDcsNiArMTEyLDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21B
U0NJSUZpbGU6KE5TVQogICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJl
c3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwogICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNo
ZVBhdGg7CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9kdWxlOwogICAgIFty
ZXN1bHQgcmVhZENhY2hlXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTE2LDYgKzEyMiw1
MyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSCiAgICAgcmV0dXJu
IFtKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
dm0gd2l0aENvZGVTaWduaW5nOmNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hl
UGF0aF07CiB9CiAKK3N0YXRpYyBKU1NjcmlwdCAqY3JlYXRlRXJyb3IoTlNTdHJpbmcgKm1lc3Nh
Z2UsIE5TRXJyb3IqKiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IpCisgICAgICAgICplcnJvciA9
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIkpTU2NyaXB0RXJyb3JEb21haW4iIGNvZGU6MSB1
c2VySW5mbzpAeyBAIm1lc3NhZ2UiOiBtZXNzYWdlIH1dOworICAgIHJldHVybiBuaWw7Cit9CisK
KysgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVh
bE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNv
dXJjZVVSTCBhbmRTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6KE5T
VVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgoreworICAgIFVOVVNF
RF9QQVJBTShlcnJvcik7CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07
CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3Vy
Y2U7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJjZVVSTDsKKyAgICByZXN1bHQtPm1f
Y2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5
cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gbWVtb3J5TWFw
cGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAq
KXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0
IE5TRXJyb3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFVSTCBm
aWxlUGF0aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKKyAgICBpZiAoIWZpbGVQYXRoVVJM
LmlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIkZpbGUgcGF0aCAlQCBpcyBub3QgYSBsb2NhbCBmaWxlIiwgc3RhdGlj
X2Nhc3Q8TlNTdHJpbmcgKj4oZmlsZVBhdGhVUkwpXSwgZXJyb3IpOworCisgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CisgICAgU3RyaW5nIHN5c3RlbVBhdGggPSBmaWxlUGF0aFVSTC5maWxlU3lz
dGVtUGF0aCgpOworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIGZpbGVEYXRhKHN5c3Rl
bVBhdGgsIHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBhdCBwYXRoICVAIGNvdWxk
IG5vdCBiZSBtYXBwZWQuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBl
cnJvcik7CisKKyAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTm90IGFs
bCBjaGFyYWN0ZXJzIGluIGZpbGUgYXQgJUAgYXJlIEFTQ0lJLiIsIHN0YXRpY19jYXN0PE5TU3Ry
aW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1
YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOworICAgIHJlc3VsdC0+
bV9zb3VyY2UgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoYml0d2lz
ZV9jYXN0PGNvbnN0IExDaGFyKj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKSk7
CisgICAgcmVzdWx0LT5tX21hcHBlZFNvdXJjZSA9IFdURk1vdmUoZmlsZURhdGEpOworICAgIHJl
c3VsdC0+bV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9
IGNhY2hlUGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgp
ICYmICFtX2NhY2hlZEJ5dGVjb2RlLm93bmVkKCkpCkBAIC0xNTIsMjIgKzIwNSwxNCBAQCAtICh2
b2lkKXJlYWRDYWNoZQogICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OkNhY2hlZEJ5dGVjb2Rl
IHsgYnVmZmVyLCBzaXplIH07CiB9CiAKLS0gKHZvaWQpd3JpdGVDYWNoZQorLSAoQk9PTCljYWNo
ZUJ5dGVjb2RlV2l0aEVycm9yOihOU0Vycm9yICoqKWVycm9yCiB7Ci0gICAgaWYgKG1fY2FjaGVk
Qnl0ZWNvZGUuc2l6ZSgpIHx8ICFtX2NhY2hlUGF0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNDOjpQYXJzZXJFcnJvciBlcnJvcjsKLSAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5l
cmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5z
b3VyY2VDb2RlKCksIGVycm9yKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywg
T19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlm
ICghcmMpCi0gICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNo
ZWRCeXRlY29kZS5zaXplKCkpOwotICAgIGNsb3NlKGZkKTsKKyAgICBTdHJpbmcgZXJyb3JTdHJp
bmcgeyB9OworICAgIFtzZWxmIHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICghZXJy
b3JTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAhIWNyZWF0ZUVycm9yKGVycm9yU3Ry
aW5nLCBlcnJvcik7CisgCisgICAgcmV0dXJuIFlFUzsKIH0KIAogQGVuZApAQCAtMTg5LDI0ICsy
MzQsNzggQEAgLSAoY29uc3QgSlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZQogICAgIHJl
dHVybiAmbV9jYWNoZWRCeXRlY29kZTsKIH0KIAotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291
cmNlQ29kZTooY29uc3QgSlNDOjpJZGVudGlmaWVyJiltb2R1bGVLZXkKKy0gKE5TVVJMICopc291
cmNlVVJMCit7CisgICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1Njcmlw
dFR5cGUpdHlwZQogewotICAgIGlmIChtX2pzU291cmNlQ29kZSkgewotICAgICAgICBBU1NFUlQo
bW9kdWxlS2V5LmltcGwoKSA9PSBtX21vZHVsZUtleSk7CisgICAgcmV0dXJuIG1fdHlwZTsKK30K
KworLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZQoreworICAgIGlmIChtX2pzU291
cmNlQ29kZSkKICAgICAgICAgcmV0dXJuIG1fanNTb3VyY2VDb2RlLmdldCgpOwotICAgIH0KIAog
ICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24geyB9Owot
ICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IEpTU2NyaXB0
U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdpbihtb2R1bGVLZXku
c3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwg
SlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAgICBTdHJpbmcgdXJs
ID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH07CisgICAgZGF0
YUxvZ0xuKCJqc1NvdXJjZUNvZGUgVVJMPSIsIHVybCk7CisgICAgYXV0byB0eXBlID0gbV90eXBl
ID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW07CisgICAgUmVm
PEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3JpZ2luKHVybCksIFVSTCh7IH0sIHVy
bCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2Rl
KFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZElu
dCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwogICAgIEpTQzo6SlNT
b3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBX
VEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291cmNlQ29kZS5zZXQodm0sIGpzU291cmNl
Q29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAgICAgcmV0dXJuIGpzU291cmNlQ29kZTsK
IH0KIAotQGVuZAorLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCit7CisgICAgaWYg
KG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiQWxyZWFkeSBo
YXZlIGNhY2hlZCBieXRlY29kZSEiKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisKKyAg
ICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVycm9yID0gIm5vIGNhY2hlIHBhdGggcHJv
dmlkZWQiOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQYXJzZXJFcnJv
ciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Uga0pTU2NyaXB0
VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1
bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5zb3Vy
Y2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrSlNTY3Jp
cHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVC
eXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VD
b2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHBh
cnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0geyB9Owor
ICAgICAgICBlcnJvciA9ICJ1bmFibGUgdG8gZ2VuZXJhdGUgY29tcGxldGUgYnl0ZWNvZGUiOwor
ICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQYXRo
IHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZk
ID09IC0xKSB7CisgICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5hYmxlIHRvIG9wZW4gZmls
ZTogIiwgW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsICIgZHVlIHRvIGVycm9yOiAiLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGludCByZXR1
cm5Db2RlID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAocmV0dXJuQ29k
ZSkKKyAgICAgICAgZXJyb3IgPSAiVW5hYmxlIHRvIGxvY2sgdGhlIGNhY2hlIGZpbGU7IGl0IG1h
eSBhbHJlYWR5IGJlIGluIHVzZS4iOworICAgIGVsc2UKKyAgICAgICAgd3JpdGUoZmQsIG1fY2Fj
aGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7CisgICAgZGF0YUxv
Z0xuKCJXcm90ZSBjYWNoZWQgYnl0ZWNvZGUhIik7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVy
biAhcmV0dXJuQ29kZTsKK30KIAorQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCShyZXZpc2lvbiAyNDE3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsOCArNDYsMTEgQEAgY2xhc3MgU3RyaW5nOwogCiAtICh1bnNpZ25lZCloYXNoOwog
LSAoY29uc3QgV1RGOjpTdHJpbmcmKXNvdXJjZTsKLS0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNv
ZGUqKWNhY2hlZEJ5dGVjb2RlOwotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZToo
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiltb2R1bGVLZXk7CistIChudWxsYWJsZSBjb25zdCBKU0M6
OkNhY2hlZEJ5dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilq
c1NvdXJjZUNvZGU7CistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CistIChOU1VS
TCAqKXNvdXJjZVVSTDsKKy0gKEpTU2NyaXB0VHlwZSl0eXBlOwogCiBAZW5kCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIu
bW0JKHJldmlzaW9uIDI0MTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHRTb3VyY2VQcm92aWRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsMTAgQEAgU3Ry
aW5nVmlldyBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpzb3VyYwogCiBjb25zdCBKU0M6OkNhY2hl
ZEJ5dGVjb2RlKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjYWNoZWRCeXRlY29kZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFttX3NjcmlwdC5nZXQoKSBjYWNoZWRCeXRlY29kZV07CisgICAgYXV0
byogcmVzdWx0ID0gW21fc2NyaXB0LmdldCgpIGNhY2hlZEJ5dGVjb2RlXTsKKyAgICBpZiAocmVz
dWx0KQorICAgICAgICBkYXRhTG9nTG4oInJldHVybmluZyBub24tbnVsbCBjYWNoZWQgYnl0ZWNv
ZGUhIik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9F
TkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRl
cy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdElu
Y2x1ZGVzLm0JKHJldmlzaW9uIDI0MTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdEluY2x1ZGVzLm0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIC8v
IFNpbmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aHJvdWdoIHRoZSBy
ZXdyaXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3JpdHRlbiB2YWx1ZXMuLi4KICNk
ZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxF
KC4uLikKKyNkZWZpbmUgSlNDX0FQSV9ERVBSRUNBVEVEKC4uLikKICNkZWZpbmUgSlNDX01BQ19W
RVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMjQxNzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDcgKzY3LDcgQEAKICNlbmRpZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
LXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNv
bnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmls
dGVyKTsKQEAgLTEzODAsMTEgKzEzODAsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7CiAjZW5kaWYKIAorICAgIGNvbnN0IGNoYXIqIGZp
bHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5VTEw7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKLSAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOworICAgIHRlc3RPYmplY3RpdmVDQVBJKGZpbHRl
cik7CiAjZW5kaWYKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsx
XSA6IE5VTEw7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRlc3RDQVBJVmlhQ3BwKGZpbHRlcikpOwog
ICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMjQxNzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxMiArNDEsMTQgQEAKICNpbXBvcnQgIlJlZ3Jlc3MxNDEyNzUuaCIKICNpbXBvcnQgIlJlZ3Jl
c3MxNDE4MDkuaCIKIAorI2ltcG9ydCA8bGlicHJvYy5oPgogI2ltcG9ydCA8cHRocmVhZC5oPgog
I2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5oPgogI2ltcG9y
dCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvRGF0YUxvZy5oPgogCisKIGV4dGVybiAi
QyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0
UmVmKTsKIGV4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dp
bmcoSlNDb250ZXh0UmVmKTsKIApAQCAtNTQsNyArNTYsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Js
b2NrX2hhc19zaWduYXR1cmUoaWQpCiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2ln
bmF0dXJlKGlkKTsKIAogZXh0ZXJuIGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9i
amVjdGl2ZUNBUEkodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29u
c3QgY2hhciopOwogZXh0ZXJuICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wp
OwogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKQEAgLTE5ODUsOSArMTk4Nyw5IEBAIHN0YXRp
YyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAg
ICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOk5TVGVtcG9y
YXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKIAotICAgICAgICBOU1N0cmluZyogZm9v
U291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGZv
byA9IG47IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9IEAiaW1wb3J0IFwib3RoZXJE
aXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsKLSAgICAgICAgTlNTdHJp
bmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIu
anNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiOworICAg
ICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5q
cyc7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9
IEAiaW1wb3J0IHsgbiB9IGZyb20gJy4uL2Zvby5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4g
bjsiOworICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9t
ICcuLi9kaXJlY3RvcnkvYmFyLmpzJzsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0
IGV4cCA9IGZvbygpOyI7CiAKICAgICAgICAgTlNVUkwqIGZvb1BhdGggPSBbdGVtcERpcmVjdG9y
eSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMiXTsKICAgICAgICAgTlNVUkwq
IGJhclBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJi
YXIuanMiXTsKQEAgLTE5OTcsMTkgKzE5OTksMjkgQEAgc3RhdGljIHZvaWQgdGVzdEJ5dGVjb2Rl
Q2FjaGUoKQogICAgICAgICBOU1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzLmNhY2hlIl07CiAgICAgICAgIE5TVVJM
KiBiYXpDYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJiYXouanMuY2FjaGUiXTsKIAorICAgICAgICBOU1VSTCogZm9vRmFrZVBhdGggPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Zvby5qcyJdOworICAgICAgICBOU1VSTCogYmFyRmFrZVBh
dGggPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeS9iYXIuanMiXTsKKyAgICAg
ICAgTlNVUkwqIGJhekZha2VQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9vdGhlckRp
cmVjdG9yeS9iYXouanMiXTsKKwogICAgICAgICBbZm9vU291cmNlIHdyaXRlVG9VUkw6Zm9vUGF0
aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxd
OwogICAgICAgICBbYmFyU291cmNlIHdyaXRlVG9VUkw6YmFyUGF0aCBhdG9taWNhbGx5Ok5PIGVu
Y29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgICAgICBbYmF6U291
cmNlIHdyaXRlVG9VUkw6YmF6UGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJp
bmdFbmNvZGluZyBlcnJvcjpuaWxdOwogCiAgICAgICAgIGF1dG8gYmxvY2sgPSBeKEpTQ29udGV4
dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1
ZSAqcmVqZWN0KSB7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkg
PSB0cnVlOwotICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZp
bGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxX
aXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpblZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBh
bmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtp
ZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCi0gICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFT
Q0lJRmlsZTpiYXJQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3
aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoXV1dOwotICAg
ICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9v
dGhlckRpcmVjdG9yeS9iYXouanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0
aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhelBhdGggaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5k
Qnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gbmlsOworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpbZm9vRmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAg
ICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZy
b21BU0NJSUZpbGU6Zm9vUGF0aCB3aXRoU291cmNlVVJMOmZvb0Zha2VQYXRoIGFuZEJ5dGVjb2Rl
Q2FjaGU6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRl
bnRpZmllciBpc0VxdWFsVG9PYmplY3Q6W2JhckZha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisg
ICAgICAgICAgICAgICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRU
eXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlN
YXBwZWRGcm9tQVNDSUlGaWxlOmJhclBhdGggd2l0aFNvdXJjZVVSTDpiYXJGYWtlUGF0aCBhbmRC
eXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBp
ZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OltiYXpGYWtlUGF0aCBhYnNvbHV0ZVN0cmlu
Z11dKQorICAgICAgICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pT
U2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUg
bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXpQYXRoIHdpdGhTb3VyY2VVUkw6YmF6RmFrZVBh
dGggYW5kQnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKworICAgICAgICAg
ICAgaWYgKHNjcmlwdCkgeworICAgICAgICAgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVj
b2RlV2l0aEVycm9yOm5pbF0pCisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250
ZXh0OmNvbnRleHRdXV07CiAgICAgICAgIH07CiAKQEAgLTIwMjMsMTIgKzIwMzUsMTQgQEAgc3Rh
dGljIHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgICAgICB9CiAKICAgICAgICAgTlNGaWxl
TWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0g
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwot
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsK
LSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07
Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9y
Om5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRo
IGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6Q2Fj
aGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IHRydWU7CisgICAg
ICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVy
cm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5h
Z2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRB
bGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmls
XTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJh
ckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdl
ciByZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiUmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CiAg
ICAgfQogfQogCkBAIC0yMDc4LDcgKzIwOTIsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUo
KQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBhdXRv
cmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2Fk
ZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIxMDMsMTYzIEBAIHN0YXRpYyB2
b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2ZUNB
UEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIDog
SlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3
Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFwcGVk
TG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAg
IGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgYWxs
b2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlND
b250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVu
dGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFu
ZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgZGF0YUxvZ0xuKCJpbnNp
ZGUgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyIik7CisgICAgTlNMb2coQCJmaWxlIHBhdGg9JUAi
LCBmaWxlUGF0aCk7CisgICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTpr
SlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBh
dGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAg
ICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAg
ICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRl
eHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQorewor
ICAgIHNpemVfdCBjb3VudCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRT
LCAwLCAwLCAwKTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4
dCA9IFtKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAg
ICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpT
VmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnLi9iYXNp
Yy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAg
SlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9D
X1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBjaGVja1Jlc3VsdChAIkpTU2NyaXB0IHNo
b3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIsIGNvdW50ID09IGFmdGVyQ291bnQpOwor
ICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAg
fQorICAgIHNpemVfdCBhZnRlciA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNU
RkRTLCAwLCAwLCAwKTsKKyAgICBjaGVja1Jlc3VsdChAIkZpbGUgZGVzY3JpcHRvciBjb3VudCBz
aG9sdWRuJ3QgY2hhbmdlIGFmdGVyIGNvbnRleHQgaXMgZGVhbGxvY2VkIiwgY291bnQgPT0gYWZ0
ZXIpOworfQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIDog
SlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3
Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1
dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0
ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVy
IHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjoo
SlNWYWx1ZSAqKXJlamVjdAoreworICAgIFVOVVNFRF9QQVJBTShyZWplY3QpOworCisgICAgTlNV
UkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmdd
XTsKKyAgICBOU1N0cmluZyAqcGF0aFN0cmluZyA9IFtmaWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107
CisgICAgaWYgKFtwYXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0
aFN0cmluZyBjb250YWluc1N0cmluZzpAImZvby5qcyJdKSB7CisgICAgICAgIGF1dG8gKnNjcmlw
dCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxN
YWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpm
aWxlUGF0aCB3aXRoU291cmNlVVJMOmZpbGVQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9y
Om5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoW3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXIuanMiXSkgeworICAgICAg
ICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9ub3QvcGF0aC90by9iYXIuanMiXSBhbmRTb3VyY2U6
QCIiIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0
XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVSTCgpCit7Cisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0
QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9k
dWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAqYmFzaWMgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhU
b1NjcmlwdHMoKV07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlw
dE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0
dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhc2ljIHdpdGhTb3VyY2VVUkw6
YmFzaWMgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQxID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQxXTsKKyAgICAgICAg
SlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKwor
ICAgICAgICBOU1VSTCAqZm9vID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVs
YXRpdmVUb1VSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNj
cmlwdDIgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZp
bGU6Zm9vIHdpdGhTb3VyY2VVUkw6Zm9vIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdDIpOworICAgICAgICBKU1ZhbHVlICpyZXN1
bHQyID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQyXTsKKworICAgICAgICBfX2Js
b2NrIGJvb2wgd2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0
aG9kOkAiY2F0Y2giIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAg
ICAgICAgd2FzUmVqZWN0ZWQgPSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgfV1dOworCisg
ICAgICAgIGNoZWNrUmVzdWx0KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGggZGlmZmVy
ZW50IGlkZW50aWZpZXJzIGlzIHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0KK30KKwor
I2RlZmluZSBSVU4odGVzdCkgZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkg
XAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwgI3Rlc3Qp
OyBcCisgICAgICAgIHRlc3Q7IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIsICN0ZXN0
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0
IGNoYXIqIGZpbHRlcikKIHsKICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJIik7
CiAKLSAgICBjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVhZExpbWl0
VGVzdHMoKTsKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdCkgLT4g
Ym9vbCB7CisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3RyY2FzZXN0
cih0ZXN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgUlVO
KGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRMaW1pdFRl
c3RzKCkpOworCisgICAgUlVOKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKCkp
OworICAgIFJVTih0ZXN0RmV0Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29DeWNsZSgp
KTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RJbXBv
cnRNb2R1bGVUd2ljZSgpKTsKKyAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGUoKSk7CiAKLSAgICB0
ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOwotICAgIHRlc3RGZXRjaCgpOwot
ICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOwotICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xl
KCk7Ci0gICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7Ci0gICAgdGVzdEJ5dGVjb2RlQ2FjaGUo
KTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRl
c3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c05p
bFNjcmlwdFVSTCgpOwotICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKyAgICBS
VU4odGVzdEpTU2NyaXB0VVJMKCkpOwogCiAgICAgLy8gRmlsZSBsb2FkaW5nCi0gICAgdGVzdExv
YWRCYXNpY0ZpbGUoKTsKKyAgICBSVU4odGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKSk7Cisg
ICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlKCkpOwogCi0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVqZWN0RWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVzb2x2ZUxhdGUpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0
TGF0ZSk7Ci0gICAgcHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKTsKLSAgICBwcm9taXNlQ3Jl
YXRlUmVzb2x2ZWQoKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVqZWN0ZWQoKTsKLSAgICBwYXJhbGxl
bFByb21pc2VSZXNvbHZlVGVzdCgpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0
aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCkp
OworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7CisgICAgUlVOKHByb21pc2VDcmVh
dGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKSk7CiAK
ICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMv
Zm9vLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0ICIuL2Jhci5qcyI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQxNzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTg4NCw2ICs4ODQsNyBAQAogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1
N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25D
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEy
ODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAvKiBmb28u
anMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovOyB9OwogCQk1MkY2QzM1
RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZC
OTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUg
LyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CiAJCTUzMEE2NkJBMUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlNC1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkI4MUZBM0U3N0UwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
NC1tbS5tbSAqLzsgfTsKQEAgLTExNjAsNiArMTE2MSw3IEBACiAJCTc5N0UwN0FBMUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg2OTQzQTFGOEMwQUM4
MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9OwogCQk3
OTg5Mzc3OTFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIg
LyogSlNGaXhlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAv
KiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMjksNiArMjAzMSw3
IEBACiAJCQlkc3RQYXRoID0gdGVzdGFwaVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0g
MTY7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpz
IGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZD
IC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1
Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3Vw
cG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGku
anMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKQEAgLTMzNzcsNiArMzM4MCw3IEBACiAJCTUy
QzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5
NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDEz
MDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZD
MzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDAxRkEz
RTMxQzAwMjZBNTQ1IC8qIFNvdXJjZXNDb2NvYS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U291cmNlc0NvY29hLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NzIsNiAr
Mzc3Niw3IEBACiAJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAv
KiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJB
RSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyog
SlNCYXNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlSW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4
ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpeGVk
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFEQ0FCNTcz
MDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRml4ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdD
MzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2lu
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTk0LDYgKzU5OTksNyBAQAog
CQkJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8s
CiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJMTQy
NzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAorCQkJCTc5ODcyQzQ3MjIxQkJB
RUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovLAogCQkJCTE0MEQxN0Q2MEU4QUQ0QTkw
MDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCiAJCQkJMTQ0MEY4QUQwQTUwOEQyMDAwMDVG
MDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJMTQ0MEY4QUMwQTUwOEQy
MDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oICovLApAQCAtNjMzOCw2ICs2MzQ0
LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTNDM0Q1RTQy
MUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHRlc3RhcGlTY3JpcHRzOwogCQkJ
cGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0czsKQEAgLTk3NTYsNiArOTc2Myw3IEBACiAJ
CQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAy
M0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0
MjE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362579</attachid>
            <date>2019-02-20 17:51:12 -0800</date>
            <delta_ts>2019-02-21 12:00:24 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>57599</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI0MTgzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlM
QUJMRSguLi4pIEpTX0VYUE9SVAorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNDE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDkgQEAK
IAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CitP
QkpDX0NMQVNTIE5TVVJMOworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAorICAgIEpTVmFsdWUgbG9h
ZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQg
KnNjcmlwdCk7CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE4MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4
ICszNCwxMCBAQAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbi5oIgogI2lt
cG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgi
CiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0ICJKU05hdGl2
ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAi
SlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAjaW1wb3J0ICJK
U1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTc1LDEyICs3NywxOCBAQCBJZGVudGlmaWVyIEpTQVBJR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkCiAgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5p
c1N5bWJvbCgpKTsKICAgICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CiAK
LSAgICBVUkwgcmVmZXJyZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+
dHJ5R2V0VmFsdWUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgp
KTsKLQotICAgIFVSTCB1cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOwotICAgIGlmICh1cmwu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1
cmwpOworICAgIGlmIChKU1N0cmluZyogcmVmZXJyZXJTdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpT
U3RyaW5nKj4odm0sIHJlZmVycmVyKSkgeworICAgICAgICBVUkwgcmVmZXJyZXJVUkwoVVJMKCks
IHJlZmVycmVyU3RyaW5nLT52YWx1ZShleGVjKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
ZmVycmVyVVJMLmlzVmFsaWQoKSk7CisKKyAgICAgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVS
TCwgbmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJu
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBVUkwgdXJsID0gVVJMKFVSTCgpLCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOwor
ICAgIH0KIAogICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZh
bGlkIFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UiX3MpOwogICAgIHJldHVybiB7IH07CkBA
IC0xNjIsOSArMTcwLDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojpt
bwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVj
LCAiTm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJv
bWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwot
ICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpT
U3RyaW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0
ZSogZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0
IHRoYXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5Lgor
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9P
YmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIApAQCAtMTc1
LDcgKzE4MywyOCBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAg
ICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJj
ZUNvZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU2NyaXB0KiBqc1NjcmlwdCA9IHN0YXRpY19j
YXN0PEpTU2NyaXB0ICo+KHNjcmlwdCk7CisKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3VyY2Ug
PSBbanNTY3JpcHQganNTb3VyY2VDb2RlXTsKKyAgICAgICAgaWYgKFVOTElLRUxZKFtqc1Njcmlw
dCB0eXBlXSAhPSBrSlNTY3JpcHRUeXBlTW9kdWxlKSkgeworICAgICAgICAgICAgYXJncy5hcHBl
bmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBKU1NjcmlwdCB0aGF0IHdh
cyBwcm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9k
dWxlLiIpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9t
aXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4u
LiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCBy
ZXF1aXJlIHNvdXJjZVVSTCwgc28gd2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVj
ayBmb3Igc3VjaCB1c2UgY2FzZXMgdW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQor
ICAgICAgICAvLyB3ZSBkbyB0aGF0LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBz
b3VyY2VVUkw6CisgICAgICAgIGlmIChOU1VSTCAqc291cmNlVVJMID0gW2pzU2NyaXB0IHNvdXJj
ZVVSTF0pIHsKKyAgICAgICAgICAgIFN0cmluZyBvbGRNb2R1bGVLZXkgeyBbc291cmNlVVJMIGFi
c29sdXRlU3RyaW5nXSB9OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBvbGRNb2R1bGVLZXkpICE9IG1vZHVsZUtleSkpIHsKKyAgICAgICAgICAg
ICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiVGhlIHNh
bWUgSlNTY3JpcHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzLCBw
cmV2aW91c2x5OiAiLCBvbGRNb2R1bGVLZXksICIgYW5kIG5vdzogIiwgbW9kdWxlS2V5LnN0cmlu
ZygpKSkpOworICAgICAgICAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1By
b21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVu
Li4uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAg
ICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNv
bHZlKCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyMzksMjIgQEAg
SlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRh
UHJvcGVydGllczsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1
YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQgKnNjcmlwdCkK
K3sKKyAgICBBU1NFUlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSWRlbnRp
ZmllciBrZXkgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyB7IFtbc2NyaXB0
IHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH0pOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBw
cm9taXNlID0gaW1wb3J0TW9kdWxlKGV4ZWMsIGtleSwganNVbmRlZmluZWQoKSwganNVbmRlZmlu
ZWQoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIHJl
c3VsdCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgdGhpcyk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXN1bHQtPnJlc29sdmUoZXhlYywg
cHJvbWlzZSk7CisgICAgcmV0dXJuIHJlc3VsdC0+cHJvbWlzZSgpOworfQorCiB9CiAKICNlbmRp
ZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNC
YXNlLmNwcAkocmV2aXNpb24gMjQxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlICJKU0Jhc2VJbnRlcm5hbC5o
IgogI2luY2x1ZGUgIkpTQmFzZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKQEAg
LTQ3LDI1ICs0OCwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlUmVmIEpT
RXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNj
cmlwdEludGVybmFsKGNvbnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNTdGF0ZSogZXhlYywgSlNDb250
ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKCFjdHgpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oY3R4KTsKIAogICAgIEpT
T2JqZWN0KiBqc1RoaXNPYmplY3QgPSB0b0pTKHRoaXNPYmplY3QpOwogCi0gICAgc3RhcnRpbmdM
aW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLQogICAgIC8vIGV2
YWx1YXRlIHNldHMgInRoaXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGlmIGl0IGlzIE5VTEwKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1dG8gc291cmNlVVJMU3RyaW5n
ID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOwotICAgIFNvdXJj
ZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4g
eyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0
aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBP
cmRpbmFsTnVtYmVyKCkpKTsKLQogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gcHJvZmlsZWRFdmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29uOjpBUEksIHNvdXJjZSwganNU
aGlzT2JqZWN0LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIApAQCAtODAsNyArNzEsNyBAQCBKU1Zh
bHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgICAgIC8vIFdlIGNvdWxk
IHN0YXNoIGl0IGluIHRoZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBpbnNwZWN0b3IgaXMgZXZlciBv
cGVuZWQuCiAgICAgICAgIGdsb2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKHJl
dHVyblZhbHVlKQpAQCAtOTAsNiArODEsMjQgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0
KEpTQ29udGV4dFJlZgogICAgIHJldHVybiB0b1JlZihleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0K
IAorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5n
UmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJM
LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
aWYgKCFjdHgpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAg
IHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7CisK
KyAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5n
KCkgOiBTdHJpbmcoKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0
LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNv
dXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CisKKyAgICByZXR1cm4g
SlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwgZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBz
b3VyY2UsIGV4Y2VwdGlvbik7Cit9CisKIGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRl
eHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50
IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmICgh
Y3R4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dlYktpdEF2
YWlsYWJpbGl0eS5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTTG9ja0hvbGRlcjsKK2Ns
YXNzIEV4ZWNTdGF0ZTsKK30KKworZXh0ZXJuICJDIiBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3Jp
cHRJbnRlcm5hbChjb25zdCBKU0M6OkpTTG9ja0hvbGRlciYsIEpTQzo6RXhlY1N0YXRlKiwgSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XZWJLaXRBdmFpbGFiaWxpdHku
aD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0xvY2tIb2xkZXI7CitjbGFzcyBFeGVjU3Rh
dGU7Cit9CisKK2V4dGVybiAiQyIgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0SW50ZXJuYWwo
Y29uc3QgSlNDOjpKU0xvY2tIb2xkZXImLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1t
CShyZXZpc2lvbiAyNDE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJBUElDYXN0
LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0ICJKU0Jhc2VJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTEwMywxNyArMTA0LDUzIEBAIC0gKEpTVmFs
dWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKikKICAgICByZXR1cm4gW3NlbGYgZXZhbHVh
dGVTY3JpcHQ6c2NyaXB0IHdpdGhTb3VyY2VVUkw6bmlsXTsKIH0KIAotLSAoSlNWYWx1ZSAqKWV2
YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNv
dXJjZVVSTAorc3RhdGljIEpTVmFsdWUgKmV2YWx1YXRlU2NyaXB0KEpTQ29udGV4dCAqY29udGV4
dCwgUmVmUHRyPE9wYXF1ZUpTU3RyaW5nPiBzb3VyY2UsIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4g
dXJsKQogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOworICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LT5tX2NvbnRleHQsIHNv
dXJjZS5nZXQoKSwgbnVsbHB0ciwgdXJsLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworCisg
ICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gW2NvbnRleHQgdmFsdWVGcm9t
Tm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OmNvbnRleHRdOworfQorCistIChKU1Zh
bHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5T
VVJMICopc291cmNlVVJMCit7CiAgICAgYXV0byBzY3JpcHRKUyA9IE9wYXF1ZUpTU3RyaW5nOjp0
cnlDcmVhdGUoc2NyaXB0KTsKICAgICBhdXRvIHNvdXJjZVVSTEpTID0gT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShbc291cmNlVVJMIGFic29sdXRlU3RyaW5nXSk7Ci0gICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KG1fY29udGV4dCwgc2NyaXB0SlMuZ2V0KCksIG51bGxw
dHIsIHNvdXJjZVVSTEpTLmdldCgpLCAwLCAmZXhjZXB0aW9uVmFsdWUpOworICAgIHJldHVybiBl
dmFsdWF0ZVNjcmlwdChzZWxmLCBzY3JpcHRKUywgc291cmNlVVJMSlMpOworfQogCi0gICAgaWYg
KGV4Y2VwdGlvblZhbHVlKQotICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhj
ZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihK
U1NjcmlwdCAqKXNjcmlwdAoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2Nv
bnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOworCisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQ
cm9ncmFtKSB7CisgICAgICAgIGF1dG8qIGpzU291cmNlQ29kZSA9IFtzY3JpcHQganNTb3VyY2VD
b2RlXTsKKworCisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOwor
ICAgICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2Nr
ZXIsIGV4ZWMsIG1fY29udGV4dCwgbnVsbHB0ciwganNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCks
ICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1
ZV07CisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6c2VsZl07CisgICAgfQogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9iamVjdCo+KHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVjdGVkV2l0aFJlYXNvbjpbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiQ29udGV4dCBkb2VzIG5vdCBzdXBw
b3J0IG1vZHVsZSBsb2FkaW5nIiBpbkNvbnRleHQ6c2VsZl0gaW5Db250ZXh0OnNlbGZdOworCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6SlNWYWx1
ZSByZXN1bHQgPSBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGxv
Y2tlciwgc2NyaXB0KTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07CisgICAgfQor
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCByZXN1bHQp
IGluQ29udGV4dDpzZWxmXTsKIH0KIAogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2
YWx1ZQpAQCAtMzAwLDYgKzMzNywxMSBAQCAtIChCT09MKWJvb2xGcm9tTm90aWZ5RXhjZXB0aW9u
OihKU1ZhbHVlCiAgICAgcmV0dXJuIE5POwogfQogCistIChKU1ZhbHVlICopdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uV2l0aFN0cmluZzooU3RyaW5nJilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3Nl
bGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJv
bU1lc3NhZ2U6c3RyaW5nIGluQ29udGV4dDpzZWxmXS5KU1ZhbHVlUmVmXTsKK30KKwogLSAodm9p
ZCliZWdpbkNhbGxiYWNrV2l0aERhdGE6KENhbGxiYWNrRGF0YSAqKWNhbGxiYWNrRGF0YSBjYWxs
ZWVWYWx1ZTooSlNWYWx1ZVJlZiljYWxsZWVWYWx1ZSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhp
c1ZhbHVlIGFyZ3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29u
c3QgSlNWYWx1ZVJlZiAqKWFyZ3VtZW50cwogewogICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFk
OjpjdXJyZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaAkocmV2aXNpb24gMjQxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBACiAv
KiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWlu
ZyB0byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBm
b3IgY29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0
ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEp
KTsKIAorLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBAcGFyYW0g
c2NyaXB0IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0aGUgcHJv
dmlkZWQgSlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFtLCB0aGUg
c2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGV2
YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBK
U1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkg
YW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFu
eSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3
aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRl
bGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2
YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFs
dWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTgzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsMTggQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAogQGNsYXNzIEpTVmlydHVhbE1h
Y2hpbmU7CiAKKy8qIQorIEBlbnVtIEpTU2NyaXB0VHlwZQorIEBhYnN0cmFjdCAgICAgQSBjb25z
dGFudCBpZGVudGlmeWluZyB0aGUgZXhlY3V0aW9uIHR5cGUgb2YgYSBKU1NjcmlwdC4KKyBAY29u
c3RhbnQgICAgIGtKU1NjcmlwdFR5cGVQcm9ncmFtICBUaGUgdHlwZSBvZiBhIG5vcm1hbCBKYXZh
U2NyaXB0IHByb2dyYW0uCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlTW9kdWxlICAgVGhl
IHR5cGUgb2YgYSBtb2R1bGUgSmF2YVNjcmlwdCBwcm9ncmFtLgorICovCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBKU1NjcmlwdFR5cGUpIHsKKyAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSwK
KyAgICBrSlNTY3JpcHRUeXBlTW9kdWxlLAorfTsKKworCiBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1h
Y29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIEpTU2NyaXB0
IDogTlNPYmplY3QKIApAQCAtNDEsNyArNTMsNyBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
eChKU0NfTUFDX1RCQSksCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3Jp
cHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgogICovCi0r
IChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3Vy
Y2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtOworKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVh
bE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSAvKkpTQ19BUElfREVQUkVDQVRFRChtYWNv
c3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKSovOwogCiAvKiEKICBAbWV0aG9kCkBA
IC01NSwxMyArNjcsNDMgQEAgSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEp
LAogCiAgSWYgdGhlIGZpbGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdp
bGwgcmV0dXJuIG5pbC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21B
U0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1Bh
dGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7Ci0KKysgKG51
bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRo
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6
KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxh
YmxlIE5TVVJMICopY2FjaGVQYXRoIC8qSlNDX0FQSV9ERVBSRUNBVEVEKG1hY29zeChKU0NfTUFD
X1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpKi87CiAKIC8qIQogIFRoaXMgaXMgZGVwcmVjYXRlZCBh
bmQgaXMgZXF1aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6
d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgogICovCi0rIChudWxsYWJsZSBpbnN0
YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1h
Y2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5T
VVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICop
Y2FjaGVQYXRoOworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZToo
TlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0g
d2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRl
Y29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCAvKkpTQ19BUElfREVQUkVDQVRF
RChtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKSovOworCisvKiEKKyBAbWV0
aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1
YWwgbWFjaGluZS4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4K
KyBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVh
dGVkIGluLgorIEBwYXJhbSBzb3VyY2VVUkwgVGhlIHNvdXJjZSBVUkwgdG8gYXNzb2NpYXRlIHdp
dGggdGhpcyBzY3JpcHQuIEZvciBtb2R1bGVzLCB0aGlzIGlzIHRoZSBtb2R1bGUgaWRlbnRpZmll
ci4KKyBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0
IGlzIGV2YWx1YXRlZCBieSB0aGUgSlMgdm0uCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250
YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVj
dXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291
bGQgbm90IGJlIGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCisgQHJlc3VsdCBUaGUgbmV3
IHNjcmlwdC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNT
Y3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdp
dGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZFNvdXJjZTooTlNTdHJpbmcgKilzb3Vy
Y2UgYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91
dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9k
CisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwg
bWFjaGluZSB3aXRoIGEgcGF0aCB0byBhIGNvZGVzaWduaW5nIGFuZCBieXRlY29kZSBjYWNoaW5n
LgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291cmNlLgorIEBwYXJhbSB2
bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisg
QHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2Ug
Y29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0byBh
c3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVs
ZSBpZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0
aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEBwYXJh
bSBlcnJvciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVh
dGVkIGlmIHRoZSByZXN1bHQgaXMgbmlsLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRp
c2N1c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBi
ZSBleHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlzIG1ldGhv
ZCB3aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgorCisgSWYgdGhlIGZp
bGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4K
KyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBl
KXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilz
b3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJy
b3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCistIChCT09M
KWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICogX051bGxhYmxlICogX051bGxh
YmxlKWVycm9yOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Njcmlw
dC5tbQkocmV2aXNpb24gMjQxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAjaW1wb3J0ICJQYXJz
ZXJFcnJvci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp
bmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAog
QGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNWaXJ0dWFsTWFjaGluZSog
bV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBlOworICAgIEZpbGVTeXN0
ZW06Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0cmluZyBtX3NvdXJjZTsK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJldGFpblB0cjxOU1VSTD4g
bV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2NhY2hlZEJ5dGVjb2RlOwog
ICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291cmNlQ29kZTsKQEAgLTUz
LDYgKzU3LDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaQogICAg
IEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxN
YWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9kdWxlOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwNyw2ICsxMTIsNyBAQCArIChpbnN0YW5jZXR5
cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVCiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5l
ID0gdm07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAgICAgcmVzdWx0LT5tX2Nh
Y2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAgICByZXN1bHQtPm1fdHlwZSA9IGtKU1NjcmlwdFR5cGVN
b2R1bGU7CiAgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0xMTYsNiArMTIyLDUzIEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5T
VVIKICAgICByZXR1cm4gW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29kZVNpZ25pbmc6Y29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0KIAorc3RhdGljIEpTU2NyaXB0ICpjcmVhdGVFcnJvcihO
U1N0cmluZyAqbWVzc2FnZSwgTlNFcnJvcioqIGVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiSlNTY3JpcHRFcnJvckRv
bWFpbiIgY29kZToxIHVzZXJJbmZvOkB7IEAibWVzc2FnZSI6IG1lc3NhZ2UgfV07CisgICAgcmV0
dXJuIG5pbDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBl
KXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhTb3VyY2VV
Ukw6KE5TVVJMICopc291cmNlVVJMIGFuZFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5kQnl0
ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICoqKWVycm9y
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tb
SlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVh
bE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5t
X3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwor
ICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCByZWFkQ2Fj
aGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGluc3RhbmNldHlwZSlzY3JpcHRPZlR5
cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIHdpdGhTb3Vy
Y2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQ
YXRoIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgoreworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOworICAgIGlm
ICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9y
KFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBwYXRoICVAIGlzIG5vdCBhIGxvY2Fs
IGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxlUGF0aFVSTCldLCBlcnJvcik7CisK
KyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJpbmcgc3lzdGVtUGF0aCA9IGZpbGVQ
YXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEg
ZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIGF0
IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihz
eXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5z
aXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAlQCBhcmUgQVNDSUkuIiwgc3Rh
dGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJvcik7CisKKyAgICBKU1Njcmlw
dCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBy
ZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7
CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0
Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxl
RGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVkU291cmNlID0gV1RGTW92ZShmaWxl
RGF0YSk7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJjZVVSTDsKKyAgICByZXN1bHQt
Pm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAobV9jYWNoZWRC
eXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUub3duZWQoKSkKQEAgLTE1MiwyMiAr
MjA1LDE0IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0KIAotLSAodm9pZCl3cml0ZUNhY2hl
CistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKIHsKLSAg
ICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1fY2FjaGVQYXRoKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwotICAgIG1fY2FjaGVkQnl0ZWNv
ZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFsTWFjaGluZS52bSwgbV9q
c1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAgIGlmIChlcnJvci5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVuKFttX2NhY2hlUGF0aCBwYXRo
XS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGlmIChmZCA9PSAt
MSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9D
S19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUu
ZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgY2xvc2UoZmQpOworICAgIFN0
cmluZyBlcnJvclN0cmluZyB7IH07CisgICAgW3NlbGYgd3JpdGVDYWNoZTplcnJvclN0cmluZ107
CisgICAgaWYgKCFlcnJvclN0cmluZy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuICEhY3JlYXRl
RXJyb3IoZXJyb3JTdHJpbmcsIGVycm9yKTsKKyAKKyAgICByZXR1cm4gWUVTOwogfQogCiBAZW5k
CkBAIC0xODksMjQgKzIzNCw3NCBAQCAtIChjb25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKiljYWNo
ZWRCeXRlCiAgICAgcmV0dXJuICZtX2NhY2hlZEJ5dGVjb2RlOwogfQogCi0tIChKU0M6OkpTU291
cmNlQ29kZSopanNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleQor
LSAoTlNVUkwgKilzb3VyY2VVUkwKK3sKKyAgICByZXR1cm4gbV9zb3VyY2VVUkwuZ2V0KCk7Cit9
CisKKy0gKEpTU2NyaXB0VHlwZSl0eXBlCit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKworLSAo
SlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZQogewotICAgIGlmIChtX2pzU291cmNlQ29k
ZSkgewotICAgICAgICBBU1NFUlQobW9kdWxlS2V5LmltcGwoKSA9PSBtX21vZHVsZUtleSk7Cisg
ICAgaWYgKG1fanNTb3VyY2VDb2RlKQogICAgICAgICByZXR1cm4gbV9qc1NvdXJjZUNvZGUuZ2V0
KCk7Ci0gICAgfQogCiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRpb24gc3RhcnRQ
b3NpdGlvbiB7IH07Ci0gICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3Jp
Z2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRl
eHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKKwor
ICAgIFN0cmluZyB1cmwgPSBTdHJpbmcgeyBbW3NlbGYgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmlu
Z10gfTsKKyAgICBhdXRvIHR5cGUgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSA/IEpT
Qzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUgOiBKU0M6OlNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6UHJvZ3JhbTsKKyAgICBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIgPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2VsZiwgSlNDOjpT
b3VyY2VPcmlnaW4odXJsKSwgVVJMKHsgfSwgdXJsKSwgc3RhcnRQb3NpdGlvbiwgdHlwZSk7CiAg
ICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRlciksIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4u
b25lQmFzZWRJbnQoKSk7CiAgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29kZSA9IEpT
Qzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwogICAgIG1f
anNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3cml0ZUNhY2hl
XTsKICAgICByZXR1cm4ganNTb3VyY2VDb2RlOwogfQogCi1AZW5kCistIChCT09MKXdyaXRlQ2Fj
aGU6KFN0cmluZyYpZXJyb3IKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisg
ICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVy
cm9yID0gIm5vIGNhY2hlIHBhdGggcHJvdmlkZWQiOworICAgICAgICByZXR1cm4gTk87CisgICAg
fQorCisgICAgSlNDOjpQYXJzZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2Uga0pTU2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRl
Y29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBb
c2VsZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBrSlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRC
eXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2Vs
ZiBqc1NvdXJjZUNvZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBt
X2NhY2hlZEJ5dGVjb2RlID0geyB9OworICAgICAgICBlcnJvciA9ICJ1bmFibGUgdG8gZ2VuZXJh
dGUgY29tcGxldGUgYnl0ZWNvZGUiOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIGlu
dCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dS
T05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGVycm9yID0gbWFrZVN0
cmluZygiVW5hYmxlIHRvIG9wZW4gZmlsZTogIiwgW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJp
bmcsICIgZHVlIHRvIGVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
Tk87CisgICAgfQorICAgIGludCByZXR1cm5Db2RlID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NL
X05CKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICAgICAgZXJyb3IgPSAiVW5hYmxlIHRvIGxv
Y2sgdGhlIGNhY2hlIGZpbGU7IGl0IG1heSBhbHJlYWR5IGJlIGluIHVzZS4iOworICAgIGVsc2UK
KyAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVj
b2RlLnNpemUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAhcmV0dXJuQ29kZTsKK30K
IAorQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHRJbnRlcm5hbC5oCShyZXZpc2lvbiAyNDE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTEg
QEAgY2xhc3MgU3RyaW5nOwogCiAtICh1bnNpZ25lZCloYXNoOwogLSAoY29uc3QgV1RGOjpTdHJp
bmcmKXNvdXJjZTsKLS0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2Rl
OwotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29uc3QgSlNDOjpJZGVudGlm
aWVyJiltb2R1bGVLZXk7CistIChudWxsYWJsZSBjb25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKilj
YWNoZWRCeXRlY29kZTsKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU7CistIChC
T09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CistIChOU1VSTCAqKXNvdXJjZVVSTDsKKy0g
KEpTU2NyaXB0VHlwZSl0eXBlOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkocmV2aXNpb24gMjQxODM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogLy8gU2luY2Ugd2UgaW5jbHVkZSBmaWxlcyB0aGF0IGhhdmVu
J3QgcGFzc2VkIHRocm91Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBub24t
cmV3cml0dGVuIHZhbHVlcy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCiAjZGVm
aW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQo
Li4uKQogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJT
SU9OX1RCQSAwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCShyZXZpc2lvbiAyNDE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAogI2VuZGlmCiAKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKK3Zv
aWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogI2VuZGlmCiAKIGludCB0ZXN0Q0FQ
SVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwxMSArMTM4MCwxMSBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNldEVycm9yTW9kZSgwKTsKICNlbmRp
ZgogCisgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsK
ICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHRlc3RPYmplY3RpdmVDQVBJKCk7CisgICAg
dGVzdE9iamVjdGl2ZUNBUEkoZmlsdGVyKTsKICNlbmRpZgogCi0gICAgY29uc3QgY2hhciogZmls
dGVyID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKICAgICBSRUxFQVNFX0FTU0VSVCghdGVz
dENBUElWaWFDcHAoZmlsdGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0yMDg0LDcgKzIwODQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQog
ICAgIH0KICAgICBmYWlsZWQgPSB0ZXN0VHlwZWRBcnJheUNBUEkoKSB8fCBmYWlsZWQ7CiAgICAg
ZmFpbGVkID0gdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQg
PSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKSB8fCBmYWlsZWQ7CisgICAgLy9mYWlsZWQgPSB0ZXN0
RnVuY3Rpb25PdmVycmlkZXMoKSB8fCBmYWlsZWQ7CiAgICAgZmFpbGVkID0gdGVzdEdsb2JhbENv
bnRleHRXaXRoRmluYWxpemVyKCkgfHwgZmFpbGVkOwogICAgIGZhaWxlZCA9IHRlc3RQaW5nUG9u
Z1N0YWNrT3ZlcmZsb3coKSB8fCBmYWlsZWQ7CiAgICAgZmFpbGVkID0gdGVzdEpTT05QYXJzZSgp
IHx8IGZhaWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkubW0JKHJldmlzaW9uIDI0MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDE0IEBACiAjaW1wb3J0
ICJSZWdyZXNzMTQxMjc1LmgiCiAjaW1wb3J0ICJSZWdyZXNzMTQxODA5LmgiCiAKKyNpbXBvcnQg
PGxpYnByb2MuaD4KICNpbXBvcnQgPHB0aHJlYWQuaD4KICNpbXBvcnQgPHZlY3Rvcj4KICNpbXBv
cnQgPHd0Zi9NZW1vcnlGb290cHJpbnQuaD4KICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgogI2lt
cG9ydCA8d3RmL0RhdGFMb2cuaD4KIAorCiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dh
cmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiBleHRlcm4gIkMiIHZvaWQg
SlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiAKQEAg
LTU0LDcgKzU2LDcgQEAgZXh0ZXJuICJDIiBib29sIF9CbG9ja19oYXNfc2lnbmF0dXJlKGlkKQog
ZXh0ZXJuICJDIiBjb25zdCBjaGFyICogX0Jsb2NrX3NpZ25hdHVyZShpZCk7CiAKIGV4dGVybiBp
bnQgZmFpbGVkOwotZXh0ZXJuICJDIiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKHZvaWQpOworZXh0
ZXJuICJDIiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKIGV4dGVybiAiQyIg
dm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqLCBib29sKTsKIAogI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECkBAIC0xODQ2LDYgKzE4NDgsNyBAQCBzdGF0aWMgdm9pZCBjaGVja01vZHVsZUNvZGVS
YW4oSlNDb250ZXh0CiAgICAgX19ibG9jayBCT09MIHByb21pc2VXYXNSZXNvbHZlZCA9IGZhbHNl
OwogICAgIFtwcm9taXNlIGludm9rZU1ldGhvZDpAInRoZW4iIHdpdGhBcmd1bWVudHM6QFteKEpT
VmFsdWUgKmV4cG9ydFZhbHVlKSB7CiAgICAgICAgIHByb21pc2VXYXNSZXNvbHZlZCA9IHRydWU7
CisgICAgICAgIE5TTG9nKEAiZXhwPSVAIiwgZXhwb3J0VmFsdWUpOwogICAgICAgICBjaGVja1Jl
c3VsdChAIm1vZHVsZSBleHBvcnRlZCB2YWx1ZSAnZXhwJyBpcyBudWxsIiwgW2V4cG9ydFZhbHVl
W0AiZXhwIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7CiAgICAgICAgIGNoZWNrUmVzdWx0
KEAicmFuIGlzICVAIiwgW2NvbnRleHRbQCJyYW4iXSBpc0VxdWFsVG9PYmplY3Q6ZXhwZWN0ZWRd
KTsKICAgICB9LCBeKEpTVmFsdWUgKmVycm9yKSB7CkBAIC0xOTgwLDIyICsxOTgzLDMwIEBAIHN0
YXRpYyB2b2lkIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpCiAgICAgfQogfQogCi1zdGF0aWMgdm9p
ZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCitzdGF0aWMgTlNVUkwgKnRlbXBGaWxlKE5TU3RyaW5nICpz
dHJpbmcpCit7CisgICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICByZXR1cm4g
W3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnN0cmluZ107Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RNb2R1bGVCeXRlY29kZUNhY2hlKCkKIHsKICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSAgICAgICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICAgICAg
TlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiaW1wb3J0ICdvdGhlckRpcmVjdG9yeS9iYXouanMnOyBl
eHBvcnQgbGV0IG4gPSBudWxsOyI7CisgICAgICAgIE5TU3RyaW5nICpiYXJTb3VyY2UgPSBAImlt
cG9ydCB7IG4gfSBmcm9tICcuLi9mb28uanMnOyBleHBvcnQgbGV0IGZvbyA9ICgpID0+IG47IjsK
KyAgICAgICAgTlNTdHJpbmcgKmJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSAnLi4v
ZGlyZWN0b3J5L2Jhci5qcyc7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAg
PSBmb28oKTsiOwogCi0gICAgICAgIE5TU3RyaW5nKiBmb29Tb3VyY2UgPSBAImltcG9ydCB7IG4g
fSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZm9vID0gbjsiOwotICAgICAgICBOU1N0
cmluZyogYmFyU291cmNlID0gQCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhw
b3J0IGxldCBuID0gbnVsbDsiOwotICAgICAgICBOU1N0cmluZyogYmF6U291cmNlID0gQCJpbXBv
cnQgeyBmb28gfSBmcm9tIFwiLi4vZGlyZWN0b3J5L2Jhci5qc1wiOyBnbG9iYWxUaGlzLnJhbiA9
IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vOyI7CisgICAgICAgIE5TVVJMICpmb29QYXRoID0g
dGVtcEZpbGUoQCJmb28uanMiKTsKKyAgICAgICAgTlNVUkwgKmJhclBhdGggPSB0ZW1wRmlsZShA
ImJhci5qcyIpOworICAgICAgICBOU1VSTCAqYmF6UGF0aCA9IHRlbXBGaWxlKEAiYmF6LmpzIik7
CiAKLSAgICAgICAgTlNVUkwqIGZvb1BhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJmb28uanMiXTsKLSAgICAgICAgTlNVUkwqIGJhclBhdGggPSBbdGVt
cERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXIuanMiXTsKLSAgICAg
ICAgTlNVUkwqIGJhelBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJiYXouanMiXTsKKyAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxl
KEAiZm9vLmpzLmNhY2hlIik7CisgICAgICAgIE5TVVJMICpiYXJDYWNoZVBhdGggPSB0ZW1wRmls
ZShAImJhci5qcy5jYWNoZSIpOworICAgICAgICBOU1VSTCAqYmF6Q2FjaGVQYXRoID0gdGVtcEZp
bGUoQCJiYXouanMuY2FjaGUiKTsKIAotICAgICAgICBOU1VSTCogZm9vQ2FjaGVQYXRoID0gW3Rl
bXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiZm9vLmpzLmNhY2hlIl07
Ci0gICAgICAgIE5TVVJMKiBiYXJDYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6QCJiYXIuanMuY2FjaGUiXTsKLSAgICAgICAgTlNVUkwqIGJhekNh
Y2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJh
ei5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCAqZm9vRmFrZVBhdGggPSBbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOkAiL2Zvby5qcyJdOworICAgICAgICBOU1VSTCAqYmFyRmFrZVBhdGggPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeS9iYXIuanMiXTsKKyAgICAgICAgTlNVUkwg
KmJhekZha2VQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9vdGhlckRpcmVjdG9yeS9i
YXouanMiXTsKIAogICAgICAgICBbZm9vU291cmNlIHdyaXRlVG9VUkw6Zm9vUGF0aCBhdG9taWNh
bGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwogICAgICAg
ICBbYmFyU291cmNlIHdyaXRlVG9VUkw6YmFyUGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5T
QVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwpAQCAtMjAwMywxMyArMjAxNCwxOSBAQCBz
dGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAKICAgICAgICAgYXV0byBibG9jayA9IF4o
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZl
LCBKU1ZhbHVlICpyZWplY3QpIHsKICAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNr
Q2FjaGUoKSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2Jq
ZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29s
dmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmb29Q
YXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25p
bmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxz
ZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKLSAg
ICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3Jp
cHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxN
YWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpiYXJDYWNoZVBhdGhd
XV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJm
aWxlOi8vL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmF6UGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5n
Om5pbCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBuaWw7CisgICAgICAgICAgICBpZiAoW2lk
ZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0Oltmb29GYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQor
ICAgICAgICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0
VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5
TWFwcGVkRnJvbUFTQ0lJRmlsZTpmb29QYXRoIHdpdGhTb3VyY2VVUkw6Zm9vRmFrZVBhdGggYW5k
Qnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpbYmFyRmFrZVBhdGggYWJzb2x1dGVTdHJp
bmddXSkKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtK
U1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5l
IG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFyUGF0aCB3aXRoU291cmNlVVJMOmJhckZha2VQ
YXRoIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgICAg
ICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6W2JhekZha2VQYXRoIGFic29s
dXRlU3RyaW5nXV0pCisgICAgICAgICAgICAgICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9m
VHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhelBhdGggd2l0aFNvdXJjZVVSTDpi
YXpGYWtlUGF0aCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworCisg
ICAgICAgICAgICBpZiAoc2NyaXB0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFbc2NyaXB0IGNh
Y2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOwor
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRo
IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKICAgICAgICAgfTsKIApAQCAtMjAyMywxMiArMjA0MCw1
OSBAQCBzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCiAgICAgICAgIH0KIAogICAgICAg
ICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVycm9y
Om5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBlcnJv
cjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJy
b3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBh
dGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJD
YWNoZVBhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gdHJ1
ZTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZv
b1BhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAg
cmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBl
cnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRVUkw6YmFyQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2Zp
bGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVk
QWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RQcm9ncmFtQnl0ZWNvZGVDYWNoZSgp
Cit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpmb29Tb3VyY2Ug
PSBAImZ1bmN0aW9uIGZvbygpIHsgcmV0dXJuIDQyOyB9OyBmdW5jdGlvbiBiYXIoKSB7IHJldHVy
biA0MDsgfTsgZm9vKCkgKyBiYXIoKTsiOworICAgICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0g
dGVtcEZpbGUoQCJmb28uanMuY2FjaGUiKTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pT
U2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSBpblZpcnR1YWxNYWNoaW5l
OmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aFNvdXJjZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAIm15LXBhdGgiXSBhbmRTb3VyY2U6Zm9vU291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2Fj
aGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAg
ICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOm5pbF0pCisgICAgICAgICAg
ICBDUkFTSCgpOworCisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IHRy
dWU7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRlSlNTY3JpcHQ6
c2NyaXB0XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoW3Jlc3VsdCBpc051bWJlcl0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJlc3Vs
dCBvZiBjYWNoZWQgcHJvZ3JhbSBpcyA0MCs0MiIsIFtbcmVzdWx0IHRvTnVtYmVyXSBpbnRWYWx1
ZV0gPT0gNDAgKyA0Mik7CisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9
IGZhbHNlOworCisgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVNYW5hZ2VyID0gW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSBbZmlsZU1h
bmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBj
aGVja1Jlc3VsdChAIlJlbW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigp
Cit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBA
InRocm93IDQyOyI7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFs
bG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRP
ZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1
YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJteS1wYXRoIl0g
YW5kU291cmNlOnNvdXJjZSBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4
Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpT
Q29udGV4dCAqLCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZWRFeGNl
cHRpb24gPSB0cnVlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051
bWJlcl0pOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGgg
ZXhjZXB0aW9uIHNob3VsZCBoYXZlIHRoZSBleGNlcHRpb24gdmFsdWUgYmUgNDIuIiwgW1tleGNl
cHRpb24gdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0Mik7CisgICAgICAgIH07CisKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dy
YW0gSlNTY3JpcHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIHJldHVybiB1bmRlZmluZWQuIiwgW3Jl
c3VsdCBpc1VuZGVmaW5lZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3Jp
cHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIGNhbGwgZXhjZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxl
ZEV4Y2VwdGlvbik7CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIxNDIsNyBAQCAtICh2b2lkKWNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVz
dExvYWRCYXNpY0ZpbGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEko
KQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIxNTMs
MTY1IEBAIHN0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQg
dGVzdE9iamVjdGl2ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExv
YWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChp
bnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250
ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3
Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9h
ZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZv
aWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6
KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29s
dmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TTG9nKEAiZmV0
Y2hpbmc6IGlkZW50aWZpZXI9JUAiLCBpZGVudGlmaWVyKTsKKyAgICBOU1VSTCAqZmlsZVBhdGgg
PSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmluZ11dOworICAgIGF1dG8g
KnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJ
RmlsZTpmaWxlUGF0aCB3aXRoU291cmNlVVJMOmZpbGVQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmls
IGVycm9yOm5pbF07CisgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhB
cmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICBlbHNlCisgICAgICAgIFtyZWplY3QgY2FsbFdpdGhB
cmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiVW5hYmxl
IHRvIGNyZWF0ZSBTY3JpcHQiIGluQ29udGV4dDpjb250ZXh0XV1dOworfQorCitAZW5kCisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKK3sKKyAgICBzaXplX3QgY291bnQgPSBwcm9j
X3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFw
cGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9h
ZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6
cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBzaXplX3QgYWZ0ZXJD
b3VudCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsK
KyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU1NjcmlwdCBzaG91bGQgbm90IGhvbGQgYSBmaWxlIGRl
c2NyaXB0b3IiLCBjb3VudCA9PSBhZnRlckNvdW50KTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2Rl
UmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KKyAgICBzaXplX3QgYWZ0ZXIgPSBw
cm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgY2hl
Y2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRlciBj
b250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09IGFmdGVyKTsKK30KKworQGludGVyZmFjZSBK
U0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIHsKK30KKworKyAo
aW5zdGFuY2V0eXBlKW5ld0NvbnRleHQKK3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4
dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVG
b3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpT
VmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocmVqZWN0KTsKKworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgTlNTdHJpbmcgKnBhdGhT
dHJpbmcgPSBbZmlsZVBhdGggYWJzb2x1dGVTdHJpbmddOworICAgIGlmIChbcGF0aFN0cmluZyBj
b250YWluc1N0cmluZzpAImJhc2ljLmpzIl0gfHwgW3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6
QCJmb28uanMiXSkgeworICAgICAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZU
eXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxN
YWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpm
aWxlUGF0aCBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JpcHQpOworICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3Nj
cmlwdF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtwYXRoU3RyaW5nIGNv
bnRhaW5zU3RyaW5nOkAiYmFyLmpzIl0pIHsKKyAgICAgICAgYXV0byAqc2NyaXB0ID0gW0pTU2Ny
aXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29u
dGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
QCIvbm90L3BhdGgvdG8vYmFyLmpzIl0gYW5kU291cmNlOkAiIiBhbmRCeXRlY29kZUNhY2hlOm5p
bCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBb
cmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworQGVuZAorCitz
dGF0aWMgdm9pZCB0ZXN0SlNTY3JpcHRVUkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRl
IG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29u
dGV4dDsKKyAgICAgICAgTlNVUkwgKmJhc2ljID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Jh
c2ljLmpzIiByZWxhdGl2ZVRvVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBK
U1NjcmlwdCAqc2NyaXB0MSA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1v
ZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVk
RnJvbUFTQ0lJRmlsZTpiYXNpYyB3aXRoU291cmNlVVJMOmJhc2ljIGFuZEJ5dGVjb2RlQ2FjaGU6
bmlsIGVycm9yOm5pbF07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0MSA9IFtjb250ZXh0IGV2
YWx1YXRlSlNTY3JpcHQ6c2NyaXB0MV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNv
ZGVSYW4oY29udGV4dCwgcmVzdWx0MSwgbnVsbCk7CisKKyAgICAgICAgTlNVUkwgKmZvbyA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiLi9mb28uanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhU
b1NjcmlwdHMoKV07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQyID0gW0pTU2NyaXB0IHNjcmlw
dE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0
dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZvbyB3aXRoU291cmNlVVJMOmZv
byBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChzY3JpcHQyKTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0MiA9IFtjb250ZXh0IGV2YWx1YXRl
SlNTY3JpcHQ6c2NyaXB0Ml07CisKKyAgICAgICAgX19ibG9jayBib29sIHdhc1JlamVjdGVkID0g
ZmFsc2U7CisgICAgICAgIFtyZXN1bHQyIGludm9rZU1ldGhvZDpAImNhdGNoIiB3aXRoQXJndW1l
bnRzOkBbXihKU1ZhbHVlICpyZWFzb24pIHsKKyAgICAgICAgICAgIHdhc1JlamVjdGVkID0gW3Jl
YXNvbiBpc09iamVjdF07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChbW3JlYXNvbiB0b1N0
cmluZ10gY29udGFpbnNTdHJpbmc6QCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9y
IHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMiXSk7CisgICAgICAgIH1dXTsKKworICAgICAgICBj
aGVja1Jlc3VsdChAIk1vZHVsZSBKU1NjcmlwdCBpbXBvcnRlZCB3aXRoIGRpZmZlcmVudCBpZGVu
dGlmaWVycyBpcyByZWplY3RlZCIsIHdhc1JlamVjdGVkKTsKKyAgICB9Cit9CisKKyNkZWZpbmUg
UlVOKHRlc3QpIGRvIHsgXAorICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpIFwKKyAgICAg
ICAgICAgIGJyZWFrOyBcCisgICAgICAgIE5TTG9nKEAiJXMuLi5cbiIsICN0ZXN0KTsgXAorICAg
ICAgICB0ZXN0OyBcCisgICAgICAgIE5TTG9nKEAiJXM6IGRvbmUuXG4iLCAjdGVzdCk7IFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKKwordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKiBm
aWx0ZXIpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOwogCi0gICAg
Y2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKLSAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7
CisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0IGNoYXIqIHRlc3QpIC0+IGJvb2wgewor
ICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgcmV0dXJuIHN0cmNhc2VzdHIodGVzdCwg
ZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIFJVTihjaGVja05l
Z2F0aXZlTlNJbnRlZ2VycygpKTsKKyAgICBSVU4ocnVuSklUVGhyZWFkTGltaXRUZXN0cygpKTsK
KworICAgIFJVTih0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpKTsKKyAgICBS
VU4odGVzdEZldGNoKCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKSk7CisgICAg
UlVOKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkpOworICAgIFJVTih0ZXN0SW1wb3J0TW9kdWxl
VHdpY2UoKSk7CisgICAgUlVOKHRlc3RNb2R1bGVCeXRlY29kZUNhY2hlKCkpOworICAgIFJVTih0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUoKSk7CisgICAgUlVOKHRlc3RQcm9ncmFtSlNTY3JpcHRF
eGNlcHRpb24oKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgp
OwotICAgIHRlc3RGZXRjaCgpOwotICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOwotICAgIHRl
c3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7Ci0gICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7Ci0g
ICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxTY3Jp
cHRVUkwoKSk7CisgICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKSk7CiAKLSAg
ICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOwotICAgIHRlc3RMb2FkZXJSZWplY3Rz
RmFpbGVkRmV0Y2goKTsKKyAgICBSVU4odGVzdEpTU2NyaXB0VVJMKCkpOwogCiAgICAgLy8gRmls
ZSBsb2FkaW5nCi0gICAgdGVzdExvYWRCYXNpY0ZpbGUoKTsKKyAgICBSVU4odGVzdExvYWRCYXNp
Y0ZpbGVMZWdhY3lTUEkoKSk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlKCkpOwogCi0gICAg
cHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwotICAgIHByb21p
c2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpOwotICAgIHByb21pc2VXaXRo
RXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpOwotICAgIHByb21pc2VXaXRoRXhlY3V0
b3IoUmVzb2x1dGlvbjo6UmVqZWN0TGF0ZSk7Ci0gICAgcHJvbWlzZVJlamVjdE9uSlNFeGNlcHRp
b24oKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVq
ZWN0ZWQoKTsKLSAgICBwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpOworICAgIFJVTihwcm9t
aXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9t
aXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21p
c2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlz
ZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VS
ZWplY3RPbkpTRXhjZXB0aW9uKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7
CisgICAgUlVOKHByb21pc2VDcmVhdGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9t
aXNlUmVzb2x2ZVRlc3QoKSk7CiAKICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
U2NyaXB0cy9iYXNpYy5qcwkocmV2aXNpb24gMjQxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjMsNSArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiskdm0ucHJpbnQoIkZPTyEiKTsK
KyR2bS5wcmludCgiZ2xvYmFsVGhpcz0iLCBnbG9iYWxUaGlzKTsKIGV4cG9ydCBsZXQgZXhwID0g
bnVsbDsKKyR2bS5wcmludCgiZ2xvYmFsVGhpcz0iLCBnbG9iYWxUaGlzKTsKIGdsb2JhbFRoaXMu
cmFuID0gbnVsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aVNjcmlwdHMvZm9vLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworaW1wb3J0ICIuL2Jhci5qcyI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjQxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg4NCw2
ICs4ODQsNyBAQAogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMx
MTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0
QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjcx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUyRDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAvKiBmb28uanMgaW4gQ29weSBTdXBwb3J0IFNj
cmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQxMzA4RjIyMUNFMDNB
MDA5QzgzNkMgLyogZm9vLmpzICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyog
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyog
VW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0u
bW0gKi87IH07CiAJCTUzMEE2NkJBMUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlNC1t
bS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2
NkI4MUZBM0U3N0UwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlNC1tbS5tbSAqLzsgfTsKQEAgLTEx
NjAsNiArMTE2MSw3IEBACiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZC
MUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4Njk0M0IxRjhDMEFD
QzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhD
Njk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTg5Mzc3OTFEQ0FCNTczMDBGOEQ0
RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIz
UENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDkwN0UxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMjksNiArMjAzMSw3IEBACiAJCQlkc3RQYXRoID0gdGVz
dGFwaVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CiAJCQlmaWxlcyA9ICgKKwkJ
CQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpzIGluIENvcHkgU3VwcG9ydCBTY3Jp
cHQgKi8sCiAJCQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkg
U3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3Rh
cGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJ
NURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNj
cmlwdCAqLywKQEAgLTMzNzcsNiArMzM4MCw3IEBACiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURC
QSAvKiBSdW50aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50
aW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAv
KiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBmb28uanM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDAxRkEzRTMxQzAwMjZBNTQ1IC8qIFNvdXJj
ZXNDb2NvYS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU291cmNlc0NvY29hLnR4dDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NzIsNiArMzc3Niw3IEBACiAJCTc5ODBDMTZC
MUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaDsgcGF0
aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCYXNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpeGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRml4ZWRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyog
QjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENU
b09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01OTk0LDYgKzU5OTksNyBAQAogCQkJCUMyQ0YzOUJGMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8sCiAJCQkJMTQyMTM1OUEwQTY3N0Y0
RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJMTQyNzExMzgwQTQ2MEJCQjAwODBFRUVB
IC8qIEpTQmFzZS5oICovLAorCQkJCTc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJ
bnRlcm5hbC5oICovLAogCQkJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2
YXRlLmggKi8sCiAJCQkJMTQ0MEY4QUQwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5jcHAgKi8sCiAJCQkJMTQ0MEY4QUMwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvci5oICovLApAQCAtNjMzOCw2ICs2MzQ0LDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJh
c2ljLmpzICovLAorCQkJCTUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IHRlc3RhcGlTY3JpcHRzOwogCQkJcGF0aCA9IEFQSS90ZXN0cy90ZXN0
YXBpU2NyaXB0czsKQEAgLTk3NTYsNiArOTc2Myw3IEBACiAJCQkJMEZGNDI3NDgxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4RUJF
OTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5
MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZy
YWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MjE3QURCNUYzMDA1QUIxNzQgLyog
VWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362626</attachid>
            <date>2019-02-21 12:00:24 -0800</date>
            <delta_ts>2019-02-21 13:12:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>64293</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAor
T0JKQ19DTEFTUyBKU1NjcmlwdDsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQVBJR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKQEAgLTU1LDYgKzU3LDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CiAKKyAgICBKU1ZhbHVl
IGxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2Ny
aXB0ICpzY3JpcHQpOworCiBwcml2YXRlOgogICAgIEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsMTAgQEAKICNpbXBvcnQgIkVycm9yLmgiCiAjaW1wb3J0ICJFeGNlcHRpb24uaCIK
ICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlz
ZS5oIgogI2ltcG9ydCAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNO
YXRpdmVTdGRGdW5jdGlvbi5oIgorI2ltcG9ydCAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBv
cnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTU291cmNlQ29kZS5oIgogI2ltcG9y
dCAiSlNWYWx1ZUludGVybmFsLmgiCkBAIC00Myw3ICs0NSw2IEBACiAjaW1wb3J0ICJKYXZhU2Ny
aXB0Q29yZS5oIgogI2ltcG9ydCAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbXBvcnQgIlNvdXJj
ZU9yaWdpbi5oIgotCiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
NzUsMTIgKzc2LDE4IEBAIElkZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWQK
ICAgICBBU1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpOwogICAgIFN0cmlu
ZyBuYW1lID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKIAotICAgIFVSTCByZWZlcnJlclVSTChV
UkwoKSwganNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlHZXRWYWx1ZSgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwotCi0gICAgVVJMIHVybCA9IFVS
TChyZWZlcnJlclVSTCwgbmFtZSk7Ci0gICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgaWYgKEpTU3RyaW5n
KiByZWZlcnJlclN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgcmVmZXJyZXIp
KSB7CisgICAgICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwgcmVmZXJyZXJTdHJpbmctPnZhbHVl
KGV4ZWMpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsK
KworICAgICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKKyAgICAgICAgaWYg
KHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVSTCB1cmwgPSBVUkwoVVJMKCks
IG5hbWUpOworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgfQogCiAgICAgdGhyb3dWTUVy
cm9yKGV4ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0gdmFsaWQgVVJMIGZyb20gaWRlbnRpZmll
ciBhbmQgYmFzZSJfcyk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTE2Miw5ICsxNjksOSBAQCBKU0lu
dGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZl
cnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHBy
b3ZpZGVkLiIpKTsKIAogICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBT
dHJvbmc8SlNTdHJpbmc+KHZtLCBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAg
ICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8v
IFRoaXMgY2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3Vy
IHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdp
dGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCkpXTsKICAgICAgICAgaWQgc2NyaXB0ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwogCkBAIC0xNzUsNyArMTgyLDMyIEBAIEpTSW50ZXJu
YWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0
aWNfY2FzdDxKU1NjcmlwdCAqPihzY3JpcHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAg
ICAgICAgSlNTY3JpcHQqIGpzU2NyaXB0ID0gc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0
KTsKKworICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtqc1NjcmlwdCBqc1NvdXJjZUNv
ZGVdOworICAgICAgICBpZiAoVU5MSUtFTFkoW2pzU2NyaXB0IHR5cGVdICE9IGtKU1NjcmlwdFR5
cGVNb2R1bGUpKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhl
YywgbWFrZVN0cmluZygiVGhlIEpTU2NyaXB0IHRoYXQgd2FzIHByb3ZpZGVkIGRpZCBub3QgaGF2
ZSBleHBlY3RlZCB0eXBlIG9mIGtKU1NjcmlwdFR5cGVNb2R1bGUuIikpKTsKKyAgICAgICAgICAg
IGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCks
IGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTog
VGhlIFNQSSB3ZSdyZSBkZXByZWNhdGluZyBkaWQgbm90IHJlcXVpcmUgc291cmNlVVJMLCBzbyB3
ZSBqdXN0CisgICAgICAgIC8vIGlnbm9yZSB0aGlzIGNoZWNrIGZvciBzdWNoIHVzZSBjYXNlcyB1
bnRpbCB3ZSBjYW4gcmVtb3ZlIHRoYXQgU1BJLiBPbmNlCisgICAgICAgIC8vIHdlIGRvIHRoYXQs
IHdlIGNhbiByZW1vdmUgdGhlIG51bGwgY2hlY2sgZm9yIHNvdXJjZVVSTDoKKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDkwOQorICAgICAgICBp
ZiAoTlNVUkwgKnNvdXJjZVVSTCA9IFtqc1NjcmlwdCBzb3VyY2VVUkxdKSB7CisgICAgICAgICAg
ICBTdHJpbmcgb2xkTW9kdWxlS2V5IHsgW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gfTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xkTW9k
dWxlS2V5KSAhPSBtb2R1bGVLZXkpKSB7CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBwcm92
aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycywgcHJldmlvdXNseTogIiwgb2xkTW9k
dWxlS2V5LCAiIGFuZCBub3c6ICIsIG1vZHVsZUtleS5zdHJpbmcoKSkpKTsKKyAgICAgICAgICAg
ICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVj
dCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFtqc1NjcmlwdCBzZXRTb3VyY2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6c3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4obW9kdWxlS2V5LnN0cmluZygpKV1dOwor
ICAgICAgICAgICAgc291cmNlID0gW2pzU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVd
OworICAgICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAgICAgY2Fs
bChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFy
Z3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyNDIsMjIgQEAgSlNPYmplY3Qq
IEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJvcGVydGll
czsKIH0KIAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3Jp
cHRNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQgKnNjcmlwdCkKK3sKKyAgICBB
U1NFUlQoc2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSWRlbnRpZmllciBrZXkg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyB7IFtbc2NyaXB0IHNvdXJjZVVS
TF0gYWJzb2x1dGVTdHJpbmddIH0pOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0g
aW1wb3J0TW9kdWxlKGV4ZWMsIGtleSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
UHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICByZXN1bHQtPnJlc29sdmUoZXhlYywgcHJvbWlzZSk7
CisgICAgcmV0dXJuIHJlc3VsdC0+cHJvbWlzZSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBKU0Nf
T0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAko
cmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIkpTQmFzZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0
OCwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVT
Y3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVy
bmFsKGNvbnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNTdGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBq
c1RoaXNPYmplY3QgPSB0b0pTKHRoaXNPYmplY3QpOwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVy
ID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNl
dHMgInRoaXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVu
dHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNl
VVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291
cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VV
UkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGlu
YWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVt
YmVyKCkpKTsKLQogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gcHJvZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29uOjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIApAQCAtODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpT
RXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0
IGluIHRoZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBpbnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAg
ICAgICAgIGdsb2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2Vw
dGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVl
KQpAQCAtOTAsNiArODEsMjQgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4
dFJlZgogICAgIHJldHVybiB0b1JlZihleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1
ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlw
dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5n
TGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRv
IHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJp
bmcoKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmco
KSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0
cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRp
bmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0
ZVNjcmlwdEludGVybmFsKGxvY2tlciwgZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4
Y2VwdGlvbik7Cit9CisKIGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4
LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5n
TGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmICghY3R4KSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0
eS5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNT
dGF0ZTsKK30KKworZXh0ZXJuICJDIiBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5h
bChjb25zdCBKU0M6OkpTTG9ja0hvbGRlciYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQu
bW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNh
c3QuaCIKICNpbXBvcnQgIkNvbXBsZXRpb24uaCIKKyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgi
CiAjaW1wb3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpAQCAtMTEyLDEwICsxMTMsMzggQEAgLSAoSlNW
YWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKQogCiAgICAgaWYgKGV4Y2VwdGlvblZh
bHVlKQogICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvblZhbHVlXTsKLQogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJl
c3VsdCBpbkNvbnRleHQ6c2VsZl07CiB9CiAKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0
OihKU1NjcmlwdCAqKXNjcmlwdAoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyht
X2NvbnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrZXIodm0pOworCisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5
cGVQcm9ncmFtKSB7CisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRy
OworICAgICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChs
b2NrZXIsIGV4ZWMsIG1fY29udGV4dCwgbnVsbHB0ciwgW3NjcmlwdCBqc1NvdXJjZUNvZGVdLT5z
b3VyY2VDb2RlKCksICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICAgICAgaWYgKGV4Y2VwdGlvblZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25WYWx1ZV07CisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVl
UmVmOnJlc3VsdCBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorCisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBUElHbG9iYWxPYmplY3QqPih2bSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246
W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIkNvbnRleHQgZG9lcyBub3Qg
c3VwcG9ydCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4dDpzZWxmXTsK
KworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5sb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVs
ZShsb2NrZXIsIHNjcmlwdCk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24o
KS0+dmFsdWUoKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJl
dHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNlUmVqZWN0ZWRXaXRoUmVhc29uOltKU1Zh
bHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6ZXhjZXB0aW9uVmFsdWUgaW5Db250ZXh0OnNlbGZdIGlu
Q29udGV4dDpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFs
dWVSZWY6dG9SZWYodm0sIHJlc3VsdCkgaW5Db250ZXh0OnNlbGZdOworfQorCiAtICh2b2lkKXNl
dEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKG1fY29udGV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2
IEBACiAvKiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVu
IHRyeWluZyB0byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdu
b3JlZCBmb3IgY29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChu
b25hdG9taWMsIHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJE
ZWxlZ2F0ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lP
U19UQkEpKTsKIAorLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBA
cGFyYW0gc2NyaXB0IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0
aGUgcHJvdmlkZWQgSlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFt
LCB0aGUgc2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0
IG9mIGV2YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQg
d2l0aCBKU1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9u
b3VzbHkgYW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUg
YW5kIGFueSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxv
YWRlciB3aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJv
bSBhIGRlbGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUuIFRoaXMgbWlycm9ycyB0
aGUgSmF2YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUg
KilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTg2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBjbGFzcyBKU1Zp
cnR1YWxNYWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1NjcmlwdFR5cGUKKyBAYWJzdHJhY3QgICAg
IEEgY29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlvbiB0eXBlIG9mIGEgSlNTY3JpcHQu
CisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSAgVGhlIHR5cGUgb2YgYSBub3Jt
YWwgSmF2YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZU1vZHVs
ZSAgIFRoZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyAqLwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7CisgICAga0pTU2NyaXB0VHlwZVBy
b2dyYW0sCisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307CisKKwogSlNDX0NMQVNTX0FWQUlM
QUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQogQGludGVyZmFjZSBK
U1NjcmlwdCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJIGlzIGRlcHJlY2F0ZWQgYW5kIHNo
b3VsZCBub3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRo
U291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAq
LworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICop
c291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKworLyohCisg
VGhpcyBTUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2UgInNjcmlw
dE9mVHlwZTppblZpcnR1YWxNYWNoaW5lOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0aFNv
dXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFi
bGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVs
bGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUg
TlNVUkwgKiljYWNoZVBhdGg7CisKKy8qIQorIFRoaXMgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHNo
b3VsZCBub3QgYmUgdXNlZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZy
b21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5n
UGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKworLyoh
CiAgQG1ldGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmll
ZCB2aXJ0dWFsIG1hY2hpbmUuCi0gQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNl
IHdoZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB0eXBl
IFRoZSB0eXBlIG9mIEphdmFTY3JpcHQgc291cmNlLgogIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFs
TWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIHNvdXJjZVVS
TCBUaGUgc291cmNlIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVs
ZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNv
dXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2
bS4KKyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhl
IFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gT24gY3JlYXRpb24sIHdlIHVz
ZSB0aGlzIHBhdGggdG8gbG9hZCB0aGUgY2FjaGVkIGJ5dGVjb2RlIG9mZiBkaXNrLiBJZiB0aGUg
Y2FjaGVkIGJ5dGVjb2RlIGF0IHRoaXMgbG9jYXRpb24gaXMgc3RhbGUsIHlvdSBzaG91bGQgZGVs
ZXRlIHRoYXQgZmlsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGNvbnN0cnVjdG9yLgorIEBwYXJhbSBl
cnJvciBBIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVk
IGlmIHRoZSByZXN1bHQgaXMgbmlsLgogIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1
c3Npb24gVGhlIGZpbGUgYXQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2Rp
ZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0
eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRP
ZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hp
bmUgKil2bSB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRTb3VyY2U6KE5TU3Ry
aW5nICopc291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRo
IGVycm9yOihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAogLyoh
CiAgQG1ldGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmll
ZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNv
ZGUgY2FjaGluZy4KLSBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0
byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBv
ZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhl
IHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgotIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBV
UkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBh
dGggb24gZGlzay4KLSBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGgg
d2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0g
ZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZp
bGUgb24gZGlzay4KKyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0
ZSB3aXRoIHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50
aWZpZXIuCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJl
IHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3
ZSB1c2UgdGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYg
dGhlIGNhY2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxk
IGRlbGV0ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KKyBAcGFy
YW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3Jl
YXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgotIEBk
aXNjdXNzaW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2Fj
aGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3lj
bGUgb2Ygdm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90
IHVzZWQgY3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUu
CisgQGRpc2N1c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxk
IG5vdCBiZSBleHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlz
IG1ldGhvZCB3aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgogCiAgSWYg
dGhlIGZpbGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJu
IG5pbC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6
KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZt
IHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0
ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxsYWJsZSBpbnN0
YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5l
OihKU1ZpcnR1YWxNYWNoaW5lICopdm0gbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwg
KilmaWxlUGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNh
Y2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVs
bGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ2Fj
aGUgdGhlIGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IHRvIGRpc2sgYXQgdGhlIHBhdGggcGFz
c2VkIGluIGR1cmluZyBjcmVhdGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3
aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY2FjaGVkIGlmIHRoZSByZXN1bHQgaXMgRkFMU0Uu
CisgKi8KKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVs
bGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CiAKIC8qIQotIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQg
aXMgZXF1aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0
aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgorIEBtZXRob2QKKyBAYWJzdHJhY3QgUmV0
dXJucyB0aGUgSlNTY3JpcHRUeXBlIG9mIHRoaXMgSlNTY3JpcHQuCiAgKi8KLSsgKG51bGxhYmxl
IGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFi
bGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNV
UkwgKiljYWNoZVBhdGg7CistIChKU1NjcmlwdFR5cGUpdHlwZTsKKworLyohCisgQG1ldGhvZAor
IEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBzb3VyY2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KKyAqLwor
LSAoTlNVUkwgKilzb3VyY2VVUkw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTYgQEAKICNp
bXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAgIF9fd2VhayBKU1ZpcnR1
YWxNYWNoaW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0VHlwZSBtX3R5cGU7Cisg
ICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3VyY2U7CiAgICAgU3RyaW5n
IG1fc291cmNlOworICAgIFJldGFpblB0cjxOU1VSTD4gbV9zb3VyY2VVUkw7CiAgICAgUmV0YWlu
UHRyPE5TVVJMPiBtX2NhY2hlUGF0aDsKICAgICBKU0M6OkNhY2hlZEJ5dGVjb2RlIG1fY2FjaGVk
Qnl0ZWNvZGU7CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNvZGU+IG1fanNTb3VyY2VD
b2RlOwpAQCAtNTMsNiArNTcsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZToo
TlNTdHJpCiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKICAgICByZXN1bHQt
Pm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IGtKU1NjcmlwdFR5
cGVNb2R1bGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAsMTIgKzk1LDEzIEBAIHN0
YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUKIAogKyAoaW5zdGFuY2V0eXBl
KXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmlu
Z1BhdGggYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKIHsKLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVT
aWduaW5nUGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisKICAgICBVUkwgZmls
ZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CiAgICAgaWYgKCFmaWxlUGF0aFVSTC5p
c0xvY2FsRmlsZSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQg
aW50byBkaXJ0eSBtZW1vcnkuCisKICAgICBWZWN0b3I8TENoYXI+IGJ1ZmZlcjsKICAgICBpZiAo
IWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgo
KSwgYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEwNiw4ICsxMTIsNyBAQCArIChp
bnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVCiAgICAgSlNTY3JpcHQgKnJlc3Vs
dCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5t
X3ZpcnR1YWxNYWNoaW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJv
bVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0g
ICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKLSAgICBbcmVzdWx0IHJlYWRDYWNo
ZV07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9kdWxlOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTExNiw2ICsxMjEsNTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlw
dEZyb21VVEY4RmlsZTooTlNVUgogICAgIHJldHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJ
RmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2ln
bmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwogfQogCitzdGF0aWMgSlNTY3Jp
cHQgKmNyZWF0ZUVycm9yKE5TU3RyaW5nICptZXNzYWdlLCBOU0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgaWYgKGVycm9yKQorICAgICAgICAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46
QCJKU1NjcmlwdEVycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86QHsgQCJtZXNzYWdlIjogbWVz
c2FnZSB9XTsKKyAgICByZXR1cm4gbmlsOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZU
eXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5l
ICopdm0gd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kU291cmNlOihOU1N0cmlu
ZyAqKXNvdXJjZSBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0
IE5TRXJyb3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIEpTU2Ny
aXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
IHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlw
ZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJlc3VsdC0+bV9zb3VyY2VV
UkwgPSBzb3VyY2VVUkw7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAg
ICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICop
ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNo
ZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29s
dXRlVVJMXSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGgg
JUAgaXMgbm90IGEgbG9jYWwgZmlsZSIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGZpbGVQYXRo
VVJMKV0sIGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBz
eXN0ZW1QYXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFwcGVkLiIsIHN0YXRpY19j
YXN0PE5TU3RyaW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0
ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRh
dGEoKSksIGZpbGVEYXRhLnNpemUoKSkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5vdCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVA
IGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9y
KTsKKworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3Vs
dC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0lt
cGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVE
YXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3VsdC0+bV9tYXBwZWRTb3Vy
Y2UgPSBXVEZNb3ZlKGZpbGVEYXRhKTsKKyAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNl
VVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCBy
ZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewog
ICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25l
ZCgpKQpAQCAtMTUyLDIyICsyMDQsMjYgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBtX2NhY2hl
ZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OwogfQogCi0t
ICh2b2lkKXdyaXRlQ2FjaGUKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJv
ciAqKillcnJvcgogewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAhbV9jYWNo
ZVBhdGgpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmcgeyB9OworICAg
IFtzZWxmIHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICghZXJyb3JTdHJpbmcuaXNO
dWxsKCkpIHsKKyAgICAgICAgY3JlYXRlRXJyb3IoZXJyb3JTdHJpbmcsIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIE5POworICAgIH0KKyAKKyAgICByZXR1cm4gWUVTOworfQogCi0gICAgSlNDOjpQ
YXJzZXJFcnJvciBlcnJvcjsKLSAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1v
ZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VD
b2RlKCksIGVycm9yKTsKLSAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVB
VCB8IE9fV1JPTkxZLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgIHJldHVybjsK
LSAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlmICghcmMp
Ci0gICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRl
Y29kZS5zaXplKCkpOwotICAgIGNsb3NlKGZkKTsKKy0gKE5TVVJMICopc291cmNlVVJMCit7Cisg
ICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1NjcmlwdFR5cGUpdHlwZQor
eworICAgIHJldHVybiBtX3R5cGU7CiB9CiAKIEBlbmQKQEAgLTE4OSwyNCArMjQ1LDc1IEBAIC0g
KGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1fY2Fj
aGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VSVCht
b2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNvZGUp
CiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKworICAgIHJldHVybiBbc2Vs
ZiBmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlXTsKK30KKworLSAoQk9PTCl3cml0ZUNhY2hlOihT
dHJpbmcmKWVycm9yCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gWUVTOworCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBlcnJvciA9
ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMg
SlNTY3JpcHQuIl9zOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQYXJz
ZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Uga0pT
U2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJh
dGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVd
LT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBr
SlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5z
b3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0g
eyB9OworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRl
Y29kZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yOiAiLCBwYXJz
ZXJFcnJvci5tZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaW50
IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JP
TkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3Ry
aW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmlu
ZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBO
TzsKICAgICB9CisgICAgaW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tf
TkIpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9j
ayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiJfczsKKyAgICBlbHNl
CisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRl
Y29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7Cit9
CisKKy0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIG1fc291cmNlVVJM
ID0gdXJsOworfQogCistIChKU0M6OkpTU291cmNlQ29kZSopZm9yY2VSZWNyZWF0ZUpTU291cmNl
Q29kZQorewogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24geyB9OwotICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9
IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdpbiht
b2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9z
aXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAgICBT
dHJpbmcgdXJsID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH07
CisgICAgYXV0byB0eXBlID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6OlNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNvdXJj
ZVR5cGU6OlByb2dyYW07CisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNl
T3JpZ2luKHVybCksIFVSTCh7IH0sIHVybCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAgIEpT
Qzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBv
c2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJh
c2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpT
U291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291
cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAg
ICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAogQGVuZAogCi0KICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0
MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVuc2ln
bmVkKWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlNDOjpD
YWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxhYmxl
IGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpKU1Nv
dXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJl
cXVpcmUgc291cmNlVVJMIHVwb24gY3JlYXRpb246IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTQ5MDkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3JlYXRl
SlNTb3VyY2VDb2RlOworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOworLSAodm9p
ZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVz
dC5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBpbnQgdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCkKIAogICAgIGNvbnN0IGNoYXIqIG9sZEZ1
bmN0aW9uT3ZlcnJpZGVzID0gT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlkZXMoKTsKICAgICAKLSAg
ICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gInRlc3RhcGktZnVuY3Rpb24tb3ZlcnJp
ZGVzLmpzIjsKKyAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gIi4vdGVzdGFwaVNj
cmlwdHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOwogICAgIEpTQzo6RnVuY3Rpb25P
dmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWRlcygpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKG51bGxwdHIsIG51bGxwdHIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlz
aW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5j
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTcgQEAKICNpbmNsdWRlICJKU1NjcmlwdFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKU1N0cmluZ1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJK
U1dlYWtQcml2YXRlLmgiCisjaWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8bGliZ2VuLmg+Cisj
ZW5kaWYKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxz
dGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaWYgIU9T
KFdJTkRPV1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTY3LDcgKzczLDcgQEAKICNlbmRpZgog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7
Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQgdGVz
dENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODYsMjAgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7CiAj
ZW5kaWYKIAotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVjdGl2ZUNBUEko
KTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBmcHJpbnRmKHN0ZG91dCwgIm1haW4gcGF0aD0lc1xu
IiwgYXJndlswXSk7CisgICAgY2hhciByZXNvbHZlZFBhdGhbUEFUSF9NQVhdOworICAgIHJlYWxw
YXRoKGFyZ3ZbMF0sIHJlc29sdmVkUGF0aCk7IAorICAgIGNoYXIqIG5ld0NXRCA9IGRpcm5hbWUo
cmVzb2x2ZWRQYXRoKTsKKyAgICBpZiAoY2hkaXIobmV3Q1dEKSkKKyAgICAgICAgZnByaW50Zihz
dGRvdXQsICJDb3VsZCBub3QgY2hkaXIgdG86ICVzXG4iLCBuZXdDV0QpOwogI2VuZGlmCiAKICAg
ICBjb25zdCBjaGFyKiBmaWx0ZXIgPSBhcmdjID4gMSA/IGFyZ3ZbMV0gOiBOVUxMOworI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECisgICAgdGVzdE9iamVjdGl2ZUNBUEkoZmlsdGVyKTsKKyNlbmRp
ZgorCiAgICAgUkVMRUFTRV9BU1NFUlQoIXRlc3RDQVBJVmlhQ3BwKGZpbHRlcikpOwogICAgIGlm
IChmaWx0ZXIpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTk3OSw3ICsxOTk0LDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcihj
b250ZXh0LCBudWxsQ2xhc3MsIDApOwogICAgIEpTQ2xhc3NSZWxlYXNlKG51bGxDbGFzcyk7CiAK
LSAgICBjb25zdCBjaGFyKiBzY3JpcHRQYXRoID0gInRlc3RhcGkuanMiOworICAgIGNvbnN0IGNo
YXIqIHNjcmlwdFBhdGggPSAiLi90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLmpzIjsKICAgICBjaGFy
KiBzY3JpcHRVVEY4ID0gY3JlYXRlU3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlKHNjcmlwdFBhdGgp
OwogICAgIGlmICghc2NyaXB0VVRGOCkgewogICAgICAgICBwcmludGYoIkZBSUw6IFRlc3Qgc2Ny
aXB0IGNvdWxkIG5vdCBiZSBsb2FkZWQuXG4iKTsKQEAgLTIwODIsMTMgKzIwOTcsMTMgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgfQogICAgICAgICBKU0dsb2Jh
bENvbnRleHRSZWxlYXNlKGNvbnRleHQpOwogICAgIH0KLSAgICBmYWlsZWQgPSB0ZXN0VHlwZWRB
cnJheUNBUEkoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEV4ZWN1dGlvblRpbWVMaW1p
dCgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKSB8fCBm
YWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCkgfHwg
ZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3coKSB8fCBmYWls
ZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEpTT05QYXJzZSgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQg
PSB0ZXN0SlNPYmplY3RHZXRQcm94eVRhcmdldCgpIHx8IGZhaWxlZDsKKyAgICBmYWlsZWQgfD0g
dGVzdFR5cGVkQXJyYXlDQVBJKCk7CisgICAgZmFpbGVkIHw9IHRlc3RFeGVjdXRpb25UaW1lTGlt
aXQoKTsKKyAgICBmYWlsZWQgfD0gdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCk7CisgICAgZmFpbGVk
IHw9IHRlc3RHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplcigpOworICAgIGZhaWxlZCB8PSB0ZXN0
UGluZ1BvbmdTdGFja092ZXJmbG93KCk7CisgICAgZmFpbGVkIHw9IHRlc3RKU09OUGFyc2UoKTsK
KyAgICBmYWlsZWQgfD0gdGVzdEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoKTsKIAogICAgIC8vIENs
ZWFyIG91dCBsb2NhbCB2YXJpYWJsZXMgcG9pbnRpbmcgYXQgSlNPYmplY3RSZWZzIHRvIGFsbG93
IHRoZWlyIHZhbHVlcyB0byBiZSBjb2xsZWN0ZWQKICAgICBmdW5jdGlvbiA9IE5VTEw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAy
NDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIlJlZ3Jlc3MxNDEyNzUuaCIK
ICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2ltcG9ydCA8bGlicHJvYy5oPgogI2ltcG9y
dCA8cHRocmVhZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3Rw
cmludC5oPgpAQCAtNTQsNyArNTUsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWdu
YXR1cmUoaWQpCiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsK
IAogZXh0ZXJuIGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEko
dm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwog
ZXh0ZXJuICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKQEAgLTE5ODAsMjIgKzE5ODEsMzAgQEAgc3RhdGljIHZvaWQgdGVz
dEltcG9ydE1vZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RCeXRlY29k
ZUNhY2hlKCkKK3N0YXRpYyBOU1VSTCAqdGVtcEZpbGUoTlNTdHJpbmcgKnN0cmluZykKK3sKKyAg
ICBOU1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3Jh
cnlEaXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgIHJldHVybiBbdGVtcERpcmVjdG9y
eSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c3RyaW5nXTsKK30KKworc3RhdGljIHZvaWQg
dGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBOU1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1w
b3JhcnlEaXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgICAgICBOU1N0cmluZyAqZm9v
U291cmNlID0gQCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5qcyc7IGV4cG9ydCBsZXQgbiA9
IG51bGw7IjsKKyAgICAgICAgTlNTdHJpbmcgKmJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZy
b20gJy4uL2Zvby5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0
cmluZyAqYmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tICcuLi9kaXJlY3RvcnkvYmFy
LmpzJzsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAK
LSAgICAgICAgTlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9m
b28uanNcIjsgZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXJTb3Vy
Y2UgPSBAImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBu
dWxsOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZy
b20gXCIuLi9kaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0
IGxldCBleHAgPSBmb287IjsKKyAgICAgICAgTlNVUkwgKmZvb1BhdGggPSB0ZW1wRmlsZShAImZv
by5qcyIpOworICAgICAgICBOU1VSTCAqYmFyUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzIik7Cisg
ICAgICAgIE5TVVJMICpiYXpQYXRoID0gdGVtcEZpbGUoQCJiYXouanMiKTsKIAotICAgICAgICBO
U1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAImZvby5qcyJdOwotICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwotICAgICAgICBOU1VSTCogYmF6
UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhei5q
cyJdOworICAgICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28uanMuY2Fj
aGUiKTsKKyAgICAgICAgTlNVUkwgKmJhckNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzLmNh
Y2hlIik7CisgICAgICAgIE5TVVJMICpiYXpDYWNoZVBhdGggPSB0ZW1wRmlsZShAImJhei5qcy5j
YWNoZSIpOwogCi0gICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKLSAgICAgICAgTlNV
UkwqIGJhckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAImJhci5qcy5jYWNoZSJdOwotICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRoID0gW3Rl
bXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNhY2hlIl07
CisgICAgICAgIE5TVVJMICpmb29GYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIv
Zm9vLmpzIl07CisgICAgICAgIE5TVVJMICpiYXJGYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6QCIvZGlyZWN0b3J5L2Jhci5qcyJdOworICAgICAgICBOU1VSTCAqYmF6RmFrZVBhdGgg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdOwogCiAg
ICAgICAgIFtmb29Tb3VyY2Ugd3JpdGVUb1VSTDpmb29QYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rp
bmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIFtiYXJTb3VyY2Ug
d3JpdGVUb1VSTDpiYXJQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0Vu
Y29kaW5nIGVycm9yOm5pbF07CkBAIC0yMDAzLDEzICsyMDEyLDE5IEBAIHN0YXRpYyB2b2lkIHRl
c3RCeXRlY29kZUNhY2hlKCkKIAogICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQgKmNv
bnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJl
amVjdCkgewogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8v
L2RpcmVjdG9yeS9iYXIuanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFs
TWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0
ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRp
ZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQotICAgICAgICAgICAgICAg
IFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZp
bGU6YmFyUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENv
ZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJE
aXJlY3RvcnkvYmF6LmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1
bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVj
b2RlQ2FjaGU6YmF6Q2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
SlNTY3JpcHQgKnNjcmlwdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9PYmplY3Q6W2Zvb0Zha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAgICAgICAgICAg
ICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGlu
VmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVND
SUlGaWxlOmZvb1BhdGggd2l0aFNvdXJjZVVSTDpmb29GYWtlUGF0aCBhbmRCeXRlY29kZUNhY2hl
OmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZp
ZXIgaXNFcXVhbFRvT2JqZWN0OltiYXJGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQorICAgICAg
ICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1v
ZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVk
RnJvbUFTQ0lJRmlsZTpiYXJQYXRoIHdpdGhTb3VyY2VVUkw6YmFyRmFrZVBhdGggYW5kQnl0ZWNv
ZGVDYWNoZTpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtp
ZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpbYmF6RmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkK
KyAgICAgICAgICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1Njcmlw
dFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9y
eU1hcHBlZEZyb21BU0NJSUZpbGU6YmF6UGF0aCB3aXRoU291cmNlVVJMOmJhekZha2VQYXRoIGFu
ZEJ5dGVjb2RlQ2FjaGU6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisKKyAgICAgICAgICAgIGlm
IChzY3JpcHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdp
dGhFcnJvcjpuaWxdKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFs
dWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpj
b250ZXh0XV1dOwogICAgICAgICB9OwogCkBAIC0yMDIzLDEyICsyMDM4LDc5IEBAIHN0YXRpYyB2
b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFn
ZXIqIGZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAg
ICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAg
ICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAg
ICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxd
OwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJv
cjpuaWxdOwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0
aCBlcnJvcjpuaWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICBy
ZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpu
aWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6
YmFyUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciBy
ZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9
IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07Cisg
ICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNo
ZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3Vs
dChAIlJlbW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiZnVuY3Rpb24g
Zm9vKCkgeyByZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28o
KSArIGJhcigpOyI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZv
by5qcy5jYWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0
T2ZUeXBlOmtKU1NjcmlwdFR5cGVQcm9ncmFtIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0
dWFsTWFjaGluZSB3aXRoU291cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJd
IGFuZFNvdXJjZTpmb29Tb3VyY2UgYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6
bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgaWYgKCFbc2Ny
aXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgIENSQVNIKCk7CisK
KyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKKyAgICAgICAg
SlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChbcmVz
dWx0IGlzTnVtYmVyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0IG9mIGNhY2hlZCBw
cm9ncmFtIGlzIDQwKzQyIiwgW1tyZXN1bHQgdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0MCArIDQy
KTsKKyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisKKyAg
ICAgICAgTlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
UmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcigpCit7CisgICAg
YXV0byB0ZXN0ID0gWyZdIChhdXRvIHR5cGUpIHsKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0gQCJ0aGlzIGlzIGEgc3ludGF4IGVy
cm9yIjsKKyAgICAgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5q
cy5jYWNoZSIpOworICAgICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOworICAgICAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBz
Y3JpcHRPZlR5cGU6dHlwZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUg
d2l0aFNvdXJjZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAIm15LXBhdGgiXSBhbmRTb3VyY2U6
Zm9vU291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICAgICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7CisgICAgICAgICAgICBpZiAoW3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9y
OiZlcnJvcl0pCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVycm9yKTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAiR290IGVycm9yIHdoZW4g
dHJ5aW5nIHRvIGNhY2hlIGJ5dGVjb2RlIGZvciBhIHNjcmlwdCB3aXRoIGEgc3ludGF4IGVycm9y
LiIsIFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3RyaW5nOkAiVW5hYmxlIHRvIGdlbmVy
YXRlIGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IGJlY2F1c2Ugb2YgYSBwYXJzZXIgZXJyb3Ii
XSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHRlc3Qoa0pTU2NyaXB0VHlwZVByb2dyYW0pOwor
ICAgIHRlc3Qoa0pTU2NyaXB0VHlwZU1vZHVsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RQcm9n
cmFtSlNTY3JpcHRFeGNlcHRpb24oKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBOU1N0cmluZyAqc291cmNlID0gQCJ0aHJvdyA0MjsiOworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3Jp
cHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVQcm9ncmFtIGluVmlydHVh
bE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoU291cmNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZFNvdXJjZTpzb3VyY2UgYW5kQnl0ZWNvZGVDYWNoZTpu
aWwgZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAg
X19ibG9jayBib29sIGhhbmRsZWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgY29udGV4dC5l
eGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQgKiwgSlNWYWx1ZSAqZXhjZXB0aW9uKSB7Cisg
ICAgICAgICAgICBoYW5kbGVkRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFtleGNlcHRpb24gaXNOdW1iZXJdKTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAi
UHJvZ3JhbSBKU1NjcmlwdCB3aXRoIGV4Y2VwdGlvbiBzaG91bGQgaGF2ZSB0aGUgZXhjZXB0aW9u
IHZhbHVlIGJlIDQyLiIsIFtbZXhjZXB0aW9uIHRvTnVtYmVyXSBpbnRWYWx1ZV0gPT0gNDIpOwor
ICAgICAgICB9OworCisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
SlNTY3JpcHQ6c2NyaXB0XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNob3VsZCBy
ZXR1cm4gdW5kZWZpbmVkLiIsIFtyZXN1bHQgaXNVbmRlZmluZWRdKTsKKyAgICAgICAgY2hlY2tS
ZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNob3VsZCBjYWxsIGV4Y2Vw
dGlvbiBoYW5kbGVyLiIsIGhhbmRsZWRFeGNlcHRpb24pOwogICAgIH0KIH0KIApAQCAtMjA3OCw3
ICsyMTYwLDcgQEAgLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldAogCiBA
ZW5kCiAKLXN0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKK3N0YXRpYyB2b2lkIHRlc3RM
b2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICAgICAg
ICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4
dF07CkBAIC0yMDg5LDM0ICsyMTcxLDE2NSBAQCBzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmls
ZSgpCiAgICAgfQogfQogCi12b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKKworQGludGVyZmFjZSBK
U0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVM
b2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIHsKK30K
KworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQKK3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pT
Q29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0
Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhh
bmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWpl
Y3QKK3sKKyAgICBOU1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRp
ZmllciB0b1N0cmluZ11dOworICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5
cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1h
Y2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCB3aXRoU291cmNlVVJMOmZp
bGVQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgaWYgKHNjcmlwdCkK
KyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICBlbHNl
CisgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhO
ZXdFcnJvckZyb21NZXNzYWdlOkAiVW5hYmxlIHRvIGNyZWF0ZSBTY3JpcHQiIGluQ29udGV4dDpj
b250ZXh0XV1dOworfQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElT
VEZEUywgMCwgMCwgMCk7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNv
bnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07
CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAg
ICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4v
YmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAg
ICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRl
eHRdOworICAgICAgICBzaXplX3QgYWZ0ZXJDb3VudCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwg
UFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJKU1Njcmlw
dCBzaG91bGQgbm90IGhvbGQgYSBmaWxlIGRlc2NyaXB0b3IiLCBjb3VudCA9PSBhZnRlckNvdW50
KTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOwor
ICAgIH0KKyAgICBzaXplX3QgYWZ0ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElE
TElTVEZEUywgMCwgMCwgMCk7CisgICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291
bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRlciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09
IGFmdGVyKTsKK30KKworQGludGVyZmFjZSBKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0
ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBl
KW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dEF1Z21lbnRl
ZExvYWRlckRlbGVnYXRlIHsKK30KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQKK3sKKyAg
ICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIGFsbG9j
XSBpbml0XTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRp
ZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRs
ZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVqZWN0KTsKKworICAg
IE5TVVJMICpmaWxlUGF0aCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3Ry
aW5nXV07CisgICAgTlNTdHJpbmcgKnBhdGhTdHJpbmcgPSBbZmlsZVBhdGggYWJzb2x1dGVTdHJp
bmddOworICAgIGlmIChbcGF0aFN0cmluZyBjb250YWluc1N0cmluZzpAImJhc2ljLmpzIl0gfHwg
W3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJmb28uanMiXSkgeworICAgICAgICBhdXRvICpz
Y3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZp
bGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpmaWxlUGF0aCBhbmRCeXRlY29kZUNhY2hlOm5pbCBl
cnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKFtwYXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFyLmpzIl0pIHsKKyAg
ICAgICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBl
TW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoU291cmNl
VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvbm90L3BhdGgvdG8vYmFyLmpzIl0gYW5kU291
cmNlOkAiIiBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JpcHQpOworICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3Nj
cmlwdF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0ZXN0SlNTY3JpcHRVUkwoKQor
eworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29u
dGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0
Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgTlNVUkwgKmJhc2ljID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Jhc2ljLmpzIiByZWxhdGl2ZVRvVVJMOnJlc29sdmVQ
YXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0MSA9IFtKU1NjcmlwdCBz
Y3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQu
dmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXNpYyB3aXRoU291cmNl
VVJMOmJhc2ljIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisKKyAgICAgICAgSlNW
YWx1ZSAqcmVzdWx0MSA9IFtjb250ZXh0IGV2YWx1YXRlSlNTY3JpcHQ6c2NyaXB0MV07CisgICAg
ICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRl
eHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcmVzdWx0MSwgbnVsbCk7
CisKKyAgICAgICAgTlNVUkwgKmZvbyA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiLi9mb28uanMi
IHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTU2NyaXB0
ICpzY3JpcHQyID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGlu
VmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVND
SUlGaWxlOmZvbyB3aXRoU291cmNlVVJMOmZvbyBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpu
aWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQyKTsKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0MiA9IFtjb250ZXh0IGV2YWx1YXRlSlNTY3JpcHQ6c2NyaXB0Ml07CisKKyAgICAgICAg
X19ibG9jayBib29sIHdhc1JlamVjdGVkID0gZmFsc2U7CisgICAgICAgIFtyZXN1bHQyIGludm9r
ZU1ldGhvZDpAImNhdGNoIiB3aXRoQXJndW1lbnRzOkBbXihKU1ZhbHVlICpyZWFzb24pIHsKKyAg
ICAgICAgICAgIHdhc1JlamVjdGVkID0gW3JlYXNvbiBpc09iamVjdF07CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChbW3JlYXNvbiB0b1N0cmluZ10gY29udGFpbnNTdHJpbmc6QCJUaGUgc2Ft
ZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMiXSk7
CisgICAgICAgIH1dXTsKKworICAgICAgICBjaGVja1Jlc3VsdChAIk1vZHVsZSBKU1NjcmlwdCBp
bXBvcnRlZCB3aXRoIGRpZmZlcmVudCBpZGVudGlmaWVycyBpcyByZWplY3RlZCIsIHdhc1JlamVj
dGVkKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgXAorICAgICAgICBpZiAo
IXNob3VsZFJ1bigjdGVzdCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIE5TTG9n
KEAiJXMuLi5cbiIsICN0ZXN0KTsgXAorICAgICAgICB0ZXN0OyBcCisgICAgICAgIE5TTG9nKEAi
JXM6IGRvbmUuXG4iLCAjdGVzdCk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKiBmaWx0ZXIpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5n
IE9iamVjdGl2ZS1DIEFQSSIpOwogCi0gICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKLSAg
ICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNv
bnN0IGNoYXIqIHRlc3QpIC0+IGJvb2wgeworICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAg
ICAgcmV0dXJuIHN0cmNhc2VzdHIodGVzdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfTsKKworICAgIFJVTihjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpKTsKKyAgICBSVU4o
cnVuSklUVGhyZWFkTGltaXRUZXN0cygpKTsKKworICAgIFJVTih0ZXN0TG9hZGVyUmVzb2x2ZXNB
YnNvbHV0ZVNjcmlwdFVSTCgpKTsKKyAgICBSVU4odGVzdEZldGNoKCkpOworICAgIFJVTih0ZXN0
RmV0Y2hXaXRoVHdvQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkp
OworICAgIFJVTih0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKSk7CisgICAgUlVOKHRlc3RNb2R1bGVC
eXRlY29kZUNhY2hlKCkpOworICAgIFJVTih0ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUoKSk7Cisg
ICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5bnRheEVycm9yKCkpOworICAgIFJVTih0ZXN0
UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkpOwogCi0gICAgdGVzdExvYWRlclJlc29sdmVzQWJz
b2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVHdv
Q3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOwotICAgIHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7CisgICAgUlVOKHRlc3RMb2Fk
ZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxl
ZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKTsKLSAgICB0
ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVOKHRlc3RKU1NjcmlwdFVSTCgp
KTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisgICAg
UlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJVTih0ZXN0TG9hZEJhc2lj
RmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUVh
Z2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdEVhZ2VyKTsK
LSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVMYXRlKTsKLSAgICBw
cm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUpOwotICAgIHByb21pc2VS
ZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlc29sdmVkKCk7Ci0gICAg
cHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3Qo
KTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIp
KTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcikp
OworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVMYXRlKSk7
CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0TGF0ZSkpOwor
ICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpKTsKKyAgICBSVU4ocHJvbWlzZUNy
ZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVqZWN0ZWQoKSk7CisgICAg
UlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkpOwogCiAgICAgdGVzdE9iamVjdGl2ZUNB
UElNYWluKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGlTY3JpcHRzL2Zvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK2ltcG9ydCAiLi9iYXIuanMiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04ODQs
NiArODg0LDcgQEAKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIz
MTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMwNjExRjFBQTUxRTFDMDBC
NEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI3
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBl
UHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpzIGluIENvcHkgU3VwcG9ydCBT
Y3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJEMTMwOEYyMjFDRTAz
QTAwOUM4MzZDIC8qIGZvby5qcyAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8q
IFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1t
Lm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQt
bW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBB
NjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0ubW0gKi87IH07CkBAIC0x
MTYwLDYgKzExNjEsNyBAQAogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTgwQzE2
QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5ODY5NDNCMUY4QzBB
Q0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVy
ZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4
QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzk4OTM3NzkxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0
NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMDI5LDYgKzIwMzEsNyBAQAogCQkJZHN0UGF0aCA9IHRl
c3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJZmlsZXMgPSAoCisJ
CQkJNTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBDb3B5IFN1cHBvcnQgU2Ny
aXB0ICovLAogCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBiYXNpYy5qcyBpbiBDb3B5
IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEwMDZGMjQ2MyAvKiB0ZXN0
YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJ
CTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGluIENvcHkgU3VwcG9ydCBT
Y3JpcHQgKi8sCkBAIC0zMzc3LDYgKzMzODAsNyBAQAogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVu
dGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4
NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2
IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMg
LyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEE2MzQwMUZBM0UzMUMwMDI2QTU0NSAvKiBTb3Vy
Y2VzQ29jb2EudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNvdXJjZXNDb2NvYS50eHQ7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzcyLDYgKzM3NzYsNyBAQAogCQk3OTgwQzE2
QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7IHBh
dGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8q
IEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BD
VG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTk5NSw2ICs2MDAwLDcgQEAKIAkJCQlDMkNGMzlCRjE2RTE1QTgx
MDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovLAogCQkJCTE0MjEzNTlBMEE2NzdG
NEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4MEE0NjBCQkIwMDgwRUVF
QSAvKiBKU0Jhc2UuaCAqLywKKwkJCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNl
SW50ZXJuYWwuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJp
dmF0ZS5oICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29u
c3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuaCAqLywKQEAgLTYzNDAsNiArNjM0Niw3IEBACiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRGQyAvKiBi
YXNpYy5qcyAqLywKKwkJCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovLAog
CQkJKTsKIAkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKIAkJCXBhdGggPSBBUEkvdGVzdHMvdGVz
dGFwaVNjcmlwdHM7CkBAIC05NzU4LDYgKzk3NjUsNyBAQAogCQkJCTBGRjQyNzQ4MTU4RUJFOTEw
MDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0OTE1OEVC
RTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIz
OTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhG
cmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDYgKzEwMyw4IEBAIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0ZWNvZGUoVk0mIHZtLCAK
ICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpO
b25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gcmVjdXJz
aXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4o
dm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwg
ZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIGlmICghdW5saW5rZWRD
b2RlQmxvY2spCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVj
b2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VDb2RlVHlwZTo6UHJvZ3Jh
bVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7CiB9CiAKQEAgLTEx
OCw2ICsxMjAsOCBAQCBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKFZNCiAg
ICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9u
ZTsKIAogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2
ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJy
b3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBpZiAoIXVubGlu
a2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBzZXJpYWxpemVC
eXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6Ok1v
ZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362635</attachid>
            <date>2019-02-21 13:12:29 -0800</date>
            <delta_ts>2019-02-21 14:31:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>64402</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAor
T0JKQ19DTEFTUyBKU1NjcmlwdDsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQVBJR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKQEAgLTU1LDYgKzU3LDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CiAKKyAgICBKU1ZhbHVl
IGxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2Ny
aXB0ICopOworCiBwcml2YXRlOgogICAgIEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSUdsb2JhbE9iamVjdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsMTAgQEAKICNpbXBvcnQgIkVycm9yLmgiCiAjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZS5oIgog
I2ltcG9ydCAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNOYXRpdmVT
dGRGdW5jdGlvbi5oIgorI2ltcG9ydCAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBvcnQgIkpT
U2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTU291cmNlQ29kZS5oIgogI2ltcG9ydCAiSlNW
YWx1ZUludGVybmFsLmgiCkBAIC00Myw3ICs0NSw2IEBACiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29y
ZS5oIgogI2ltcG9ydCAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbXBvcnQgIlNvdXJjZU9yaWdp
bi5oIgotCiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzUsMTIg
Kzc2LDE4IEBAIElkZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWQKICAgICBB
U1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpOwogICAgIFN0cmluZyBuYW1l
ID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKIAotICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwg
anNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlHZXRWYWx1ZSgpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwotCi0gICAgVVJMIHVybCA9IFVSTChyZWZl
cnJlclVSTCwgbmFtZSk7Ci0gICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgaWYgKEpTU3RyaW5nKiByZWZl
cnJlclN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgcmVmZXJyZXIpKSB7Cisg
ICAgICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwgcmVmZXJyZXJTdHJpbmctPnZhbHVlKGV4ZWMp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAg
ICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVSTCB1cmwgPSBVUkwoVVJMKCksIG5hbWUp
OworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgfQogCiAgICAgdGhyb3dWTUVycm9yKGV4
ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0gdmFsaWQgVVJMIGZyb20gaWRlbnRpZmllciBhbmQg
YmFzZSJfcyk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTE2Miw5ICsxNjksOSBAQCBKU0ludGVybmFs
UHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+
cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVk
LiIpKTsKIAogICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8
SlNTdHJpbmc+KHZtLCBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0
byogcmVzb2x2ZSA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCAxLCAicmVzb2x2ZSIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVj
dHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0ds
b2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsK
ICAgICAgICAgaWQgc2NyaXB0ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSkpOwogCkBAIC0xNzUsNyArMTgyLDMyIEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNV
bmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2Fz
dDxKU1NjcmlwdCAqPihzY3JpcHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAg
SlNTY3JpcHQqIGpzU2NyaXB0ID0gc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KTsKKwor
ICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtqc1NjcmlwdCBqc1NvdXJjZUNvZGVdOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoW2pzU2NyaXB0IHR5cGVdICE9IGtKU1NjcmlwdFR5cGVNb2R1
bGUpKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWFr
ZVN0cmluZygiVGhlIEpTU2NyaXB0IHRoYXQgd2FzIHByb3ZpZGVkIGRpZCBub3QgaGF2ZSBleHBl
Y3RlZCB0eXBlIG9mIGtKU1NjcmlwdFR5cGVNb2R1bGUuIikpKTsKKyAgICAgICAgICAgIGNhbGwo
ZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3Ms
ICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlIFNQ
SSB3ZSdyZSBkZXByZWNhdGluZyBkaWQgbm90IHJlcXVpcmUgc291cmNlVVJMLCBzbyB3ZSBqdXN0
CisgICAgICAgIC8vIGlnbm9yZSB0aGlzIGNoZWNrIGZvciBzdWNoIHVzZSBjYXNlcyB1bnRpbCB3
ZSBjYW4gcmVtb3ZlIHRoYXQgU1BJLiBPbmNlCisgICAgICAgIC8vIHdlIGRvIHRoYXQsIHdlIGNh
biByZW1vdmUgdGhlIG51bGwgY2hlY2sgZm9yIHNvdXJjZVVSTDoKKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDkwOQorICAgICAgICBpZiAoTlNV
UkwgKnNvdXJjZVVSTCA9IFtqc1NjcmlwdCBzb3VyY2VVUkxdKSB7CisgICAgICAgICAgICBTdHJp
bmcgb2xkTW9kdWxlS2V5IHsgW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gfTsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xkTW9kdWxlS2V5
KSAhPSBtb2R1bGVLZXkpKSB7CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBwcm92aWRlZCBm
b3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycywgcHJldmlvdXNseTogIiwgb2xkTW9kdWxlS2V5
LCAiIGFuZCBub3c6ICIsIG1vZHVsZUtleS5zdHJpbmcoKSkpKTsKKyAgICAgICAgICAgICAgICBj
YWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBh
cmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFtqc1NjcmlwdCBzZXRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6c3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4obW9kdWxlS2V5LnN0cmluZygpKV1dOworICAgICAg
ICAgICAgc291cmNlID0gW2pzU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdOworICAg
ICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAgICAgY2FsbChleGVj
LCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJU
aGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNV
bmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyNDIsMjIgQEAgSlNPYmplY3QqIEpTQVBJ
R2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKIH0K
IAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1
bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQgKnNjcmlwdCkKK3sKKyAgICBBU1NFUlQo
c2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSWRlbnRpZmllciBrZXkgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyB7IFtbc2NyaXB0IHNvdXJjZVVSTF0gYWJz
b2x1dGVTdHJpbmddIH0pOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gaW1wb3J0
TW9kdWxlKGV4ZWMsIGtleSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTUHJvbWlz
ZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICByZXN1bHQtPnJlc29sdmUoZXhlYywgcHJvbWlzZSk7CisgICAg
cmV0dXJuIHJlc3VsdC0+cHJvbWlzZSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNp
b24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpT
QmFzZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0OCwxNSBA
QAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQo
SlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGNv
bnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNTdGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0eCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBqc1RoaXNP
YmplY3QgPSB0b0pTKHRoaXNPYmplY3QpOwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3Rk
OjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNldHMgInRo
aXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xv
YmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8g
c291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291cmNlID0g
bWFrZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJp
bmcgfSwgVVJMKHsgfSwgc291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkp
KTsKLQogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBK
U1ZhbHVlIHJldHVyblZhbHVlID0gcHJvZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29uOjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKIApAQCAtODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVh
dGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0IGluIHRo
ZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBpbnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAgICAgICAg
IGdsb2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAt
OTAsNiArODEsMjQgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgog
ICAgIHJldHVybiB0b1JlZihleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBK
U0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdM
aW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5nTGluZU51
bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRvIHNvdXJj
ZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsK
KyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291
cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyks
IFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5l
TnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0ZVNjcmlw
dEludGVybmFsKGxvY2tlciwgZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlv
bik7Cit9CisKIGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0
cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmICghY3R4KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgor
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsK
K30KKworZXh0ZXJuICJDIiBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25z
dCBKU0M6OkpTTG9ja0hvbGRlciYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJl
dmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNhc3QuaCIK
ICNpbXBvcnQgIkNvbXBsZXRpb24uaCIKKyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgiCiAjaW1w
b3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpAQCAtMTEyLDEwICsxMTMsMzggQEAgLSAoSlNWYWx1ZSAq
KWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKQogCiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQog
ICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZh
bHVlXTsKLQogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6c2VsZl07CiB9CiAKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1Nj
cmlwdCAqKXNjcmlwdAoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRl
eHQpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOworCisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQcm9n
cmFtKSB7CisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOworICAg
ICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIs
IGV4ZWMsIG1fY29udGV4dCwgbnVsbHB0ciwgW3NjcmlwdCBqc1NvdXJjZUNvZGVdLT5zb3VyY2VD
b2RlKCksICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25WYWx1ZV07CisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJl
c3VsdCBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
SlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBUElHbG9iYWxPYmplY3QqPih2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246W0pTVmFs
dWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIkNvbnRleHQgZG9lcyBub3Qgc3VwcG9y
dCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4dDpzZWxmXTsKKworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTVmFsdWUg
cmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5sb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShsb2Nr
ZXIsIHNjcmlwdCk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uVmFsdWUgPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFs
dWUoKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNlUmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6ZXhjZXB0aW9uVmFsdWUgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4
dDpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYodm0sIHJlc3VsdCkgaW5Db250ZXh0OnNlbGZdOworfQorCiAtICh2b2lkKXNldEV4Y2Vw
dGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KG1fY29udGV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBACiAv
KiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWlu
ZyB0byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBm
b3IgY29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0
ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEp
KTsKIAorLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBAcGFyYW0g
c2NyaXB0IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0aGUgcHJv
dmlkZWQgSlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFtLCB0aGUg
c2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGV2
YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBK
U1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkg
YW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFu
eSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3
aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRl
bGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2
YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFs
dWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxN
YWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1NjcmlwdFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29u
c3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlvbiB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNv
bnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2
YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRo
ZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0s
CisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRSht
YWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQogQGludGVyZmFjZSBKU1Njcmlw
dCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu
b3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoU291cmNl
VVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAo
bnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKworLyohCisgVGhpcyBT
UEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2UgInNjcmlwdE9mVHlw
ZTppblZpcnR1YWxNYWNoaW5lOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0aFNvdXJjZVVS
TDphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUg
TlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwg
KiljYWNoZVBhdGg7CisKKy8qIQorIFRoaXMgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu
b3QgYmUgdXNlZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4
RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5l
ICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBh
bmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKworLyohCiAgQG1l
dGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0
dWFsIG1hY2hpbmUuCi0gQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNlIHdoZW4g
dGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB0eXBlIFRoZSB0
eXBlIG9mIEphdmFTY3JpcHQgc291cmNlLgogIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUg
c291cmNlIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRo
aXMgaXMgdGhlIG1vZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBj
b2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBA
cGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNo
b3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gT24gY3JlYXRpb24sIHdlIHVzZSB0aGlz
IHBhdGggdG8gbG9hZCB0aGUgY2FjaGVkIGJ5dGVjb2RlIG9mZiBkaXNrLiBJZiB0aGUgY2FjaGVk
IGJ5dGVjb2RlIGF0IHRoaXMgbG9jYXRpb24gaXMgc3RhbGUsIHlvdSBzaG91bGQgZGVsZXRlIHRo
YXQgZmlsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGNvbnN0cnVjdG9yLgorIEBwYXJhbSBlcnJvciBB
IGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRo
ZSByZXN1bHQgaXMgbmlsLgogIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1c3Npb24g
VGhlIGZpbGUgYXQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBm
b3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6
KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bSB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRTb3VyY2U6KE5TU3RyaW5nICop
c291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGVycm9y
OihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAogLyohCiAgQG1l
dGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0
dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2Fj
aGluZy4KLSBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpT
IHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZh
U2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlw
dCBjYW4gYmUgZXZhbHVhdGVkIGluLgotIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29u
dGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24g
ZGlzay4KLSBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUg
dGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZmlsZVBh
dGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24g
ZGlzay4KKyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0ZSB3aXRo
IHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50aWZpZXIu
CisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBW
TSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3ZSB1c2Ug
dGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYgdGhlIGNh
Y2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxkIGRlbGV0
ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KKyBAcGFyYW0gZXJy
b3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBp
ZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgotIEBkaXNjdXNz
aW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2FjaGVQYXRo
IHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3ljbGUgb2Yg
dm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90IHVzZWQg
Y3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUuCisgQGRp
c2N1c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBi
ZSBleHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlzIG1ldGhv
ZCB3aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgogCiAgSWYgdGhlIGZp
bGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4K
ICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxsYWJsZSBpbnN0YW5jZXR5
cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxl
UGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihu
dWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUg
KiBfTnVsbGFibGUpZXJyb3I7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ2FjaGUgdGhl
IGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IHRvIGRpc2sgYXQgdGhlIHBhdGggcGFzc2VkIGlu
IGR1cmluZyBjcmVhdGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhl
IHNjcmlwdCBjb3VsZCBub3QgYmUgY2FjaGVkIGlmIHRoZSByZXN1bHQgaXMgRkFMU0UuCisgKi8K
Ky0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUg
KiBfTnVsbGFibGUpZXJyb3I7CiAKIC8qIQotIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgZXF1
aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVT
aWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgorIEBtZXRob2QKKyBAYWJzdHJhY3QgUmV0dXJucyB0
aGUgSlNTY3JpcHRUeXBlIG9mIHRoaXMgSlNTY3JpcHQuCiAgKi8KLSsgKG51bGxhYmxlIGluc3Rh
bmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNV
UkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKilj
YWNoZVBhdGg7CistIChKU1NjcmlwdFR5cGUpdHlwZTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0
cmFjdCBSZXR1cm5zIHRoZSBzb3VyY2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KKyAqLworLSAoTlNV
UkwgKilzb3VyY2VVUkw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTYgQEAKICNpbXBvcnQg
IlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAgIF9fd2VhayBKU1ZpcnR1YWxNYWNo
aW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0VHlwZSBtX3R5cGU7CisgICAgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3VyY2U7CiAgICAgU3RyaW5nIG1fc291
cmNlOworICAgIFJldGFpblB0cjxOU1VSTD4gbV9zb3VyY2VVUkw7CiAgICAgUmV0YWluUHRyPE5T
VVJMPiBtX2NhY2hlUGF0aDsKICAgICBKU0M6OkNhY2hlZEJ5dGVjb2RlIG1fY2FjaGVkQnl0ZWNv
ZGU7CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNvZGU+IG1fanNTb3VyY2VDb2RlOwpA
QCAtNTMsNiArNTcsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJp
CiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKICAgICByZXN1bHQtPm1fdmly
dHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IGtKU1NjcmlwdFR5cGVNb2R1
bGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAsMTIgKzk1LDEzIEBAIHN0YXRpYyBi
b29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUKIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlw
dEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmluZ1BhdGgg
YW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVTaWduaW5n
UGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisKICAgICBVUkwgZmlsZVBhdGhV
UkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CiAgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2Fs
RmlsZSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBt
bWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQgaW50byBk
aXJ0eSBtZW1vcnkuCisKICAgICBWZWN0b3I8TENoYXI+IGJ1ZmZlcjsKICAgICBpZiAoIWZpbGxC
dWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKSwgYnVm
ZmVyKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEwNiw4ICsxMTIsNyBAQCArIChpbnN0YW5j
ZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVCiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5tX3ZpcnR1
YWxNYWNoaW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmVz
dWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKLSAgICBbcmVzdWx0IHJlYWRDYWNoZV07Cisg
ICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTExNiw2ICsxMjEsNTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21V
VEY4RmlsZTooTlNVUgogICAgIHJldHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpm
aWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1Bh
dGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwogfQogCitzdGF0aWMgSlNTY3JpcHQgKmNy
ZWF0ZUVycm9yKE5TU3RyaW5nICptZXNzYWdlLCBOU0Vycm9yKiogZXJyb3IpCit7CisgICAgaWYg
KGVycm9yKQorICAgICAgICAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJKU1Nj
cmlwdEVycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86QHsgQCJtZXNzYWdlIjogbWVzc2FnZSB9
XTsKKyAgICByZXR1cm4gbmlsOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihK
U1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0g
d2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kU291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJy
b3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIEpTU2NyaXB0ICpy
ZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHJlc3Vs
dC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAg
ICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJlc3VsdC0+bV9zb3VyY2VVUkwgPSBz
b3VyY2VVUkw7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAgICBbcmVz
dWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFuY2V0eXBl
KXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBh
dGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNV
UkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VE
X1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJM
XSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGggJUAgaXMg
bm90IGEgbG9jYWwgZmlsZSIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGZpbGVQYXRoVVJMKV0s
IGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBzeXN0ZW1Q
YXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFwcGVkLiIsIHN0YXRpY19jYXN0PE5T
U3RyaW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0ZXJzQXJl
QWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSks
IGZpbGVEYXRhLnNpemUoKSkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIk5vdCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBB
U0NJSS4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKwor
ICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRh
dGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBX
VEZNb3ZlKGZpbGVEYXRhKTsKKyAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwor
ICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCByZWFkQ2Fj
aGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlm
IChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQpA
QCAtMTUyLDIyICsyMDQsMjYgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBtX2NhY2hlZEJ5dGVj
b2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OwogfQogCi0tICh2b2lk
KXdyaXRlQ2FjaGUKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKill
cnJvcgogewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAhbV9jYWNoZVBhdGgp
Ci0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmcgeyB9OworICAgIFtzZWxm
IHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICghZXJyb3JTdHJpbmcuaXNOdWxsKCkp
IHsKKyAgICAgICAgY3JlYXRlRXJyb3IoZXJyb3JTdHJpbmcsIGVycm9yKTsKKyAgICAgICAgcmV0
dXJuIE5POworICAgIH0KIAotICAgIEpTQzo6UGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgbV9jYWNo
ZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5l
LnZtLCBtX2pzU291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBlcnJvcik7Ci0gICAgaWYgKGVycm9y
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQ
YXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7Ci0gICAgaWYg
KGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tf
RVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICB3cml0ZShmZCwgbV9jYWNoZWRC
eXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7
CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoTlNVUkwgKilzb3VyY2VVUkwKK3sKKyAgICByZXR1
cm4gbV9zb3VyY2VVUkwuZ2V0KCk7Cit9CisKKy0gKEpTU2NyaXB0VHlwZSl0eXBlCit7CisgICAg
cmV0dXJuIG1fdHlwZTsKIH0KIAogQGVuZApAQCAtMTg5LDI0ICsyNDUsNzUgQEAgLSAoY29uc3Qg
SlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZQogICAgIHJldHVybiAmbV9jYWNoZWRCeXRl
Y29kZTsKIH0KIAotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29uc3QgSlND
OjpJZGVudGlmaWVyJiltb2R1bGVLZXkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNv
ZGUKIHsKLSAgICBpZiAobV9qc1NvdXJjZUNvZGUpIHsKLSAgICAgICAgQVNTRVJUKG1vZHVsZUtl
eS5pbXBsKCkgPT0gbV9tb2R1bGVLZXkpOworICAgIGlmIChtX2pzU291cmNlQ29kZSkKICAgICAg
ICAgcmV0dXJuIG1fanNTb3VyY2VDb2RlLmdldCgpOworCisgICAgcmV0dXJuIFtzZWxmIGZvcmNl
UmVjcmVhdGVKU1NvdXJjZUNvZGVdOworfQorCistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYp
ZXJyb3IKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIHJldHVy
biBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVycm9yID0gIk5vIGNh
Y2hlIHdhcyBwYXRoIHByb3ZpZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBKU1Njcmlw
dC4iX3M7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBKU0M6OlBhcnNlckVycm9y
IHBhcnNlckVycm9yOworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBrSlNTY3JpcHRU
eXBlTW9kdWxlOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJj
ZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtKU1Njcmlw
dFR5cGVQcm9ncmFtOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZUJ5
dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJjZUNv
ZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocGFy
c2VyRXJyb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSB7IH07Cisg
ICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5hYmxlIHRvIGdlbmVyYXRlIGJ5dGVjb2RlIGZv
ciB0aGlzIEpTU2NyaXB0IGJlY2F1c2Ugb2YgYSBwYXJzZXIgZXJyb3I6ICIsIHBhcnNlckVycm9y
Lm1lc3NhZ2UoKSk7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBpbnQgZmQgPSBv
cGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2
NjYpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVu
YWJsZSB0byBvcGVuIGZpbGU6ICIsIFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCAiIGR1
ZSB0byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5POwogICAg
IH0KKyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Cisg
ICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0gIlVuYWJsZSB0byBsb2NrIHRoZSBj
YWNoZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2UuIl9zOworICAgIGVsc2UKKyAgICAg
ICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNp
emUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAhcmV0dXJuQ29kZTsKK30KKworLSAo
dm9pZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsCit7CisgICAgbV9zb3VyY2VVUkwgPSB1cmw7
Cit9CiAKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlCit7
CiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbiB7IH07
Ci0gICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gSlNTY3Jp
cHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3JpZ2luKG1vZHVsZUtl
eS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigp
LCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKKworICAgIFN0cmluZyB1
cmwgPSBTdHJpbmcgeyBbW3NlbGYgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfTsKKyAgICBh
dXRvIHR5cGUgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSA/IEpTQzo6U291cmNlUHJv
dmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUgOiBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
UHJvZ3JhbTsKKyAgICBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIg
PSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2VsZiwgSlNDOjpTb3VyY2VPcmlnaW4o
dXJsKSwgVVJMKHsgfSwgdXJsKSwgc3RhcnRQb3NpdGlvbiwgdHlwZSk7CiAgICAgSlNDOjpTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24u
bV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQo
KSk7CiAgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VD
b2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwogICAgIG1fanNTb3VyY2VDb2Rl
LnNldCh2bSwganNTb3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3cml0ZUNhY2hlXTsKICAgICByZXR1
cm4ganNTb3VyY2VDb2RlOwogfQogCiBAZW5kCiAKLQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkocmV2aXNpb24gMjQxODY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDggKzQ2LDEyIEBAIGNsYXNzIFN0cmluZzsKIAogLSAodW5zaWduZWQpaGFz
aDsKIC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7Ci0tIChjb25zdCBKU0M6OkNhY2hlZEJ5
dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNv
ZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5OworLSAobnVsbGFibGUgY29uc3Qg
SlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7CistIChKU0M6OkpTU291cmNlQ29k
ZSopanNTb3VyY2VDb2RlOworLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2UgcmVxdWlyZSBz
b3VyY2VVUkwgdXBvbiBjcmVhdGlvbjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NDkwOQorLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWZvcmNlUmVjcmVhdGVKU1NvdXJj
ZUNvZGU7CistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CistICh2b2lkKXNldFNv
dXJjZVVSTDooTlNVUkwgKil1cmw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAko
cmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5j
dGlvbk92ZXJyaWRlc1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGlu
dCB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKQogCiAgICAgY29uc3QgY2hhciogb2xkRnVuY3Rpb25P
dmVycmlkZXMgPSBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpOwogICAgIAotICAgIE9wdGlv
bnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkgPSAidGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMi
OworICAgIE9wdGlvbnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkgPSAiLi90ZXN0YXBpU2NyaXB0cy90
ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyI7CiAgICAgSlNDOjpGdW5jdGlvbk92ZXJyaWRl
czo6cmVpbnN0YWxsT3ZlcnJpZGVzKCk7CiAKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAobnVsbHB0ciwgbnVsbHB0cik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMjQx
ODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDExICs0MCwxOCBAQAogI2luY2x1ZGUgIkpTU2NyaXB0UmVmUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nUmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkpTV2Vha1By
aXZhdGUuaCIKKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgor
I2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHRp
bWUuaD4KKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKICNpZiBPUyhXSU5ET1dTKQpAQCAtNjcsNyArNzQs
NyBAQAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0
aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogI2Vu
ZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwx
MSArMTM4NywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNldEVy
cm9yTW9kZSgwKTsKICNlbmRpZgogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICB0ZXN0
T2JqZWN0aXZlQ0FQSSgpOworI2lmICFPUyhXSU5ET1dTKQorICAgIGNoYXIgcmVzb2x2ZWRQYXRo
W1BBVEhfTUFYXTsKKyAgICByZWFscGF0aChhcmd2WzBdLCByZXNvbHZlZFBhdGgpOyAKKyAgICBj
aGFyKiBuZXdDV0QgPSBkaXJuYW1lKHJlc29sdmVkUGF0aCk7CisgICAgaWYgKGNoZGlyKG5ld0NX
RCkpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiQ291bGQgbm90IGNoZGlyIHRvOiAlc1xuIiwg
bmV3Q1dEKTsKICNlbmRpZgogCiAgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBh
cmd2WzFdIDogTlVMTDsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIHRlc3RPYmplY3Rp
dmVDQVBJKGZpbHRlcik7CisjZW5kaWYKKwogICAgIFJFTEVBU0VfQVNTRVJUKCF0ZXN0Q0FQSVZp
YUNwcChmaWx0ZXIpKTsKICAgICBpZiAoZmlsdGVyKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5
NzksNyArMTk5NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgSlNP
YmplY3RNYWtlQ29uc3RydWN0b3IoY29udGV4dCwgbnVsbENsYXNzLCAwKTsKICAgICBKU0NsYXNz
UmVsZWFzZShudWxsQ2xhc3MpOwogCi0gICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICJ0ZXN0
YXBpLmpzIjsKKyAgICBjb25zdCBjaGFyKiBzY3JpcHRQYXRoID0gIi4vdGVzdGFwaVNjcmlwdHMv
dGVzdGFwaS5qcyI7CiAgICAgY2hhciogc2NyaXB0VVRGOCA9IGNyZWF0ZVN0cmluZ1dpdGhDb250
ZW50c09mRmlsZShzY3JpcHRQYXRoKTsKICAgICBpZiAoIXNjcmlwdFVURjgpIHsKICAgICAgICAg
cHJpbnRmKCJGQUlMOiBUZXN0IHNjcmlwdCBjb3VsZCBub3QgYmUgbG9hZGVkLlxuIik7CkBAIC0y
MDgyLDEzICsyMDk3LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
ICAgIH0KICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKICAgICB9Ci0g
ICAgZmFpbGVkID0gdGVzdFR5cGVkQXJyYXlDQVBJKCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9
IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEZ1
bmN0aW9uT3ZlcnJpZGVzKCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RHbG9iYWxDb250
ZXh0V2l0aEZpbmFsaXplcigpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0UGluZ1BvbmdT
dGFja092ZXJmbG93KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RKU09OUGFyc2UoKSB8
fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoKSB8fCBm
YWlsZWQ7CisgICAgZmFpbGVkIHw9IHRlc3RUeXBlZEFycmF5Q0FQSSgpOworICAgIGZhaWxlZCB8
PSB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCk7CisgICAgZmFpbGVkIHw9IHRlc3RGdW5jdGlvbk92
ZXJyaWRlcygpOworICAgIGZhaWxlZCB8PSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXIo
KTsKKyAgICBmYWlsZWQgfD0gdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdygpOworICAgIGZhaWxl
ZCB8PSB0ZXN0SlNPTlBhcnNlKCk7CisgICAgZmFpbGVkIHw9IHRlc3RKU09iamVjdEdldFByb3h5
VGFyZ2V0KCk7CiAKICAgICAvLyBDbGVhciBvdXQgbG9jYWwgdmFyaWFibGVzIHBvaW50aW5nIGF0
IEpTT2JqZWN0UmVmcyB0byBhbGxvdyB0aGVpciB2YWx1ZXMgdG8gYmUgY29sbGVjdGVkCiAgICAg
ZnVuY3Rpb24gPSBOVUxMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQAogI2lt
cG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCisjaWYg
X19oYXNfaW5jbHVkZSg8bGlicHJvYy5oPikKKyNkZWZpbmUgSEFTX0xJQlBST0MgMQorI2ltcG9y
dCA8bGlicHJvYy5oPgorI2Vsc2UKKyNkZWZpbmUgSEFTX0xJQlBST0MgMAorI2VuZGlmCiAjaW1w
b3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5Rm9v
dHByaW50Lmg+CkBAIC01NCw3ICs2MCw3IEBAIGV4dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFzX3Np
Z25hdHVyZShpZCkKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQp
OwogCiBleHRlcm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQ
SSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7
CiBleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKiwgYm9vbCk7CiAKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRApAQCAtMTk4MCwyMiArMTk4NiwzMCBAQCBzdGF0aWMgdm9pZCB0
ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJ5dGVj
b2RlQ2FjaGUoKQorc3RhdGljIE5TVVJMICp0ZW1wRmlsZShOU1N0cmluZyAqc3RyaW5nKQorewor
ICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1RlbXBv
cmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgcmV0dXJuIFt0ZW1wRGlyZWN0
b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzdHJpbmddOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSgpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0g
ICAgICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgICAgIE5TU3RyaW5nICpm
b29Tb3VyY2UgPSBAImltcG9ydCAnb3RoZXJEaXJlY3RvcnkvYmF6LmpzJzsgZXhwb3J0IGxldCBu
ID0gbnVsbDsiOworICAgICAgICBOU1N0cmluZyAqYmFyU291cmNlID0gQCJpbXBvcnQgeyBuIH0g
ZnJvbSAnLi4vZm9vLmpzJzsgZXhwb3J0IGxldCBmb28gPSAoKSA9PiBuOyI7CisgICAgICAgIE5T
U3RyaW5nICpiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gJy4uL2RpcmVjdG9yeS9i
YXIuanMnOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7IjsK
IAotICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4u
L2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhclNv
dXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9
IG51bGw7IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0g
ZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBv
cnQgbGV0IGV4cCA9IGZvbzsiOworICAgICAgICBOU1VSTCAqZm9vUGF0aCA9IHRlbXBGaWxlKEAi
Zm9vLmpzIik7CisgICAgICAgIE5TVVJMICpiYXJQYXRoID0gdGVtcEZpbGUoQCJiYXIuanMiKTsK
KyAgICAgICAgTlNVUkwgKmJhelBhdGggPSB0ZW1wRmlsZShAImJhei5qcyIpOwogCi0gICAgICAg
IE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OkAiZm9vLmpzIl07Ci0gICAgICAgIE5TVVJMKiBiYXJQYXRoID0gW3RlbXBEaXJlY3Rvcnkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzIl07Ci0gICAgICAgIE5TVVJMKiBi
YXpQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6
LmpzIl07CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5j
YWNoZSIpOworICAgICAgICBOU1VSTCAqYmFyQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJiYXIuanMu
Y2FjaGUiKTsKKyAgICAgICAgTlNVUkwgKmJhekNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmF6Lmpz
LmNhY2hlIik7CiAKLSAgICAgICAgTlNVUkwqIGZvb0NhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcy5jYWNoZSJdOwotICAgICAgICBO
U1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiYmFyLmpzLmNhY2hlIl07Ci0gICAgICAgIE5TVVJMKiBiYXpDYWNoZVBhdGggPSBb
dGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXouanMuY2FjaGUi
XTsKKyAgICAgICAgTlNVUkwgKmZvb0Zha2VQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpA
Ii9mb28uanMiXTsKKyAgICAgICAgTlNVUkwgKmJhckZha2VQYXRoID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpAIi9kaXJlY3RvcnkvYmFyLmpzIl07CisgICAgICAgIE5TVVJMICpiYXpGYWtlUGF0
aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl07CiAK
ICAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1BhdGggYXRvbWljYWxseTpOTyBlbmNv
ZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAgW2JhclNvdXJj
ZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5n
RW5jb2RpbmcgZXJyb3I6bmlsXTsKQEAgLTIwMDMsMTMgKzIwMTcsMTkgQEAgc3RhdGljIHZvaWQg
dGVzdEJ5dGVjb2RlQ2FjaGUoKQogCiAgICAgICAgIGF1dG8gYmxvY2sgPSBeKEpTQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAq
cmVqZWN0KSB7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6
Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpblZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRC
eXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVu
dGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCi0gICAgICAgICAgICAg
ICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJ
RmlsZTpiYXJQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRo
Q29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoXV1dOwotICAgICAg
ICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhl
ckRpcmVjdG9yeS9iYXouanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhelBhdGggaW5WaXJ0dWFs
TWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0
ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICBKU1NjcmlwdCAqc2NyaXB0ID0gbmlsOworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpbZm9vRmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAgICAg
ICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUg
aW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6Zm9vUGF0aCB3aXRoU291cmNlVVJMOmZvb0Zha2VQYXRoIGFuZEJ5dGVjb2RlQ2Fj
aGU6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRp
ZmllciBpc0VxdWFsVG9PYmplY3Q6W2JhckZha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAg
ICAgICAgICAgICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBl
TW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBw
ZWRGcm9tQVNDSUlGaWxlOmJhclBhdGggd2l0aFNvdXJjZVVSTDpiYXJGYWtlUGF0aCBhbmRCeXRl
Y29kZUNhY2hlOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAo
W2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OltiYXpGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11d
KQorICAgICAgICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXpQYXRoIHdpdGhTb3VyY2VVUkw6YmF6RmFrZVBhdGgg
YW5kQnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKworICAgICAgICAgICAg
aWYgKHNjcmlwdCkgeworICAgICAgICAgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVjb2Rl
V2l0aEVycm9yOm5pbF0pCisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0
OmNvbnRleHRdXV07CiAgICAgICAgIH07CiAKQEAgLTIwMjMsMTIgKzIwNDMsNzkgQEAgc3RhdGlj
IHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgICAgICB9CiAKICAgICAgICAgTlNGaWxlTWFu
YWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAg
ICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKLSAg
ICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07Ci0g
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5p
bF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRoIGVy
cm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQ
YXRoIGVycm9yOm5pbF07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IHRydWU7CisgICAgICAg
IHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVycm9y
Om5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwg
Jj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsK
KyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNh
Y2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciBy
ZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVz
dWx0KEAiUmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB0ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUoKQoreworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0gQCJmdW5jdGlv
biBmb28oKSB7IHJldHVybiA0MjsgfTsgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gNDA7IH07IGZv
bygpICsgYmFyKCk7IjsKKyAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxlKEAi
Zm9vLmpzLmNhY2hlIik7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3Jp
cHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJteS1wYXRo
Il0gYW5kU291cmNlOmZvb1NvdXJjZSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBpZiAoIVtz
Y3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpuaWxdKQorICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSB0cnVlOworICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFty
ZXN1bHQgaXNOdW1iZXJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgb2YgY2FjaGVk
IHByb2dyYW0gaXMgNDArNDIiLCBbW3Jlc3VsdCB0b051bWJlcl0gaW50VmFsdWVdID09IDQwICsg
NDIpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKKwor
ICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVkQWxsKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5bnRheEVycm9yKCkKK3sKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGF1dG8gdHlwZSkgeworICAgICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpmb29Tb3VyY2UgPSBAInRoaXMgaXMgYSBzeW50YXgg
ZXJyb3IiOworICAgICAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxlKEAiZm9v
LmpzLmNhY2hlIik7CisgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2NyaXB0
IHNjcmlwdE9mVHlwZTp0eXBlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZSB3aXRoU291cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZFNvdXJj
ZTpmb29Tb3VyY2UgYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgICAgICBOU0Vycm9yICpl
cnJvciA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbc2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJy
b3I6JmVycm9yXSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZXJyb3IpOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJHb3QgZXJyb3Igd2hl
biB0cnlpbmcgdG8gY2FjaGUgYnl0ZWNvZGUgZm9yIGEgc2NyaXB0IHdpdGggYSBzeW50YXggZXJy
b3IuIiwgW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJVbmFibGUgdG8gZ2Vu
ZXJhdGUgYnl0ZWNvZGUgZm9yIHRoaXMgSlNTY3JpcHQgYmVjYXVzZSBvZiBhIHBhcnNlciBlcnJv
ciJdKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGVzdChrSlNTY3JpcHRUeXBlUHJvZ3JhbSk7
CisgICAgdGVzdChrSlNTY3JpcHRUeXBlTW9kdWxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFBy
b2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQyOyI7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNj
cmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJteS1wYXRoIl0gYW5kU291cmNlOnNvdXJjZSBhbmRCeXRlY29kZUNhY2hl
Om5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAg
ICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBjb250ZXh0
LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICpleGNlcHRpb24pIHsK
KyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOworICAgICAgICAgICAgY2hlY2tSZXN1bHQo
QCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNob3VsZCBoYXZlIHRoZSBleGNlcHRp
b24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0Mik7
CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAg
ICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNlcHRpb24gc2hvdWxk
IHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1VuZGVmaW5lZF0pOworICAgICAgICBjaGVj
a1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIGNhbGwgZXhj
ZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlvbik7CiAgICAgfQogfQogCkBAIC0yMDc4
LDcgKzIxNjUsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0CiAK
IEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQorc3RhdGljIHZvaWQgdGVz
dExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAg
ICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250
ZXh0XTsKQEAgLTIwODksMzQgKzIxNzYsMTY5IEBAIHN0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNG
aWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQorCitAaW50ZXJmYWNl
IEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVs
ZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgewor
fQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9IFtb
SlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBm
ZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZl
SGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJl
amVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltpZGVu
dGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9m
VHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6
ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0
KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVs
c2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0
aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0
OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUo
KQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90IGNvdW50ID0gcHJvY19waWRpbmZvKGdl
dHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworI2VuZGlmCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVk
TG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6cmVz
b2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBzaXplX3QgYWZ0ZXJDb3Vu
dCA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAwLCAwKTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJKU1NjcmlwdCBzaG91bGQgbm90IGhvbGQgYSBmaWxlIGRlc2Ny
aXB0b3IiLCBjb3VudCA9PSBhZnRlckNvdW50KTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFu
KGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KKyNpZiBIQVNfTElCUFJPQworICAgIHNp
emVfdCBhZnRlciA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAwLCAw
LCAwKTsKKyAgICBjaGVja1Jlc3VsdChAIkZpbGUgZGVzY3JpcHRvciBjb3VudCBzaG9sdWRuJ3Qg
Y2hhbmdlIGFmdGVyIGNvbnRleHQgaXMgZGVhbGxvY2VkIiwgY291bnQgPT0gYWZ0ZXIpOworI2Vu
ZGlmCit9CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgOiBK
U0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSluZXdD
b250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRBdWdtZW50ZWRMb2Fk
ZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0
byAqcmVzdWx0ID0gW1tKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5p
dF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIg
d2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihK
U1ZhbHVlICopcmVqZWN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlamVjdCk7CisKKyAgICBOU1VS
TCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmluZ11d
OworICAgIE5TU3RyaW5nICpwYXRoU3RyaW5nID0gW2ZpbGVQYXRoIGFic29sdXRlU3RyaW5nXTsK
KyAgICBpZiAoW3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXNpYy5qcyJdIHx8IFtwYXRo
U3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiZm9vLmpzIl0pIHsKKyAgICAgICAgYXV0byAqc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZp
bGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6
bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgW3Jlc29sdmUg
Y2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChbcGF0aFN0cmluZyBjb250YWluc1N0cmluZzpAImJhci5qcyJdKSB7CisgICAgICAg
IGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVs
ZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aFNvdXJjZVVSTDpb
TlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL25vdC9wYXRoL3RvL2Jhci5qcyJdIGFuZFNvdXJjZTpA
IiIgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2NyaXB0KTsKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRd
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdEpTU2NyaXB0VVJMKCkKK3sKKyAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRB
dWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1
bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIE5TVVJMICpiYXNpYyA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiLi9iYXNpYy5qcyIgcmVsYXRpdmVUb1VSTDpyZXNvbHZlUGF0aFRv
U2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDEgPSBbSlNTY3JpcHQgc2NyaXB0
T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1
YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFzaWMgd2l0aFNvdXJjZVVSTDpi
YXNpYyBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworCisgICAgICAgIEpTVmFsdWUg
KnJlc3VsdDEgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDFdOworICAgICAgICBK
U1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsK
KyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHJlc3VsdDEsIG51bGwpOworCisg
ICAgICAgIE5TVVJMICpmb28gPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIi4vZm9vLmpzIiByZWxh
dGl2ZVRvVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAqc2Ny
aXB0MiA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmls
ZTpmb28gd2l0aFNvdXJjZVVSTDpmb28gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0Mik7CisgICAgICAgIEpTVmFsdWUgKnJlc3Vs
dDIgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDJdOworCisgICAgICAgIF9fYmxv
Y2sgYm9vbCB3YXNSZWplY3RlZCA9IGZhbHNlOworICAgICAgICBbcmVzdWx0MiBpbnZva2VNZXRo
b2Q6QCJjYXRjaCIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqcmVhc29uKSB7CisgICAgICAg
ICAgICB3YXNSZWplY3RlZCA9IFtyZWFzb24gaXNPYmplY3RdOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoW1tyZWFzb24gdG9TdHJpbmddIGNvbnRhaW5zU3RyaW5nOkAiVGhlIHNhbWUgSlNT
Y3JpcHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzIl0pOworICAg
ICAgICB9XV07CisKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJNb2R1bGUgSlNTY3JpcHQgaW1wb3J0
ZWQgd2l0aCBkaWZmZXJlbnQgaWRlbnRpZmllcnMgaXMgcmVqZWN0ZWQiLCB3YXNSZWplY3RlZCk7
CisgICAgfQorfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7IFwKKyAgICAgICAgaWYgKCFzaG91
bGRSdW4oI3Rlc3QpKSBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICBOU0xvZyhAIiVz
Li4uXG4iLCAjdGVzdCk7IFwKKyAgICAgICAgdGVzdDsgXAorICAgICAgICBOU0xvZyhAIiVzOiBk
b25lLlxuIiwgI3Rlc3QpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK3ZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBPYmpl
Y3RpdmUtQyBBUEkiKTsKIAotICAgIGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCk7Ci0gICAgcnVu
SklUVGhyZWFkTGltaXRUZXN0cygpOworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25zdCBj
aGFyKiB0ZXN0KSAtPiBib29sIHsKKyAgICAgICAgaWYgKGZpbHRlcikKKyAgICAgICAgICAgIHJl
dHVybiBzdHJjYXNlc3RyKHRlc3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH07CisKKyAgICBSVU4oY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKSk7CisgICAgUlVOKHJ1bkpJ
VFRocmVhZExpbWl0VGVzdHMoKSk7CisKKyAgICBSVU4odGVzdExvYWRlclJlc29sdmVzQWJzb2x1
dGVTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRlc3RGZXRjaCgpKTsKKyAgICBSVU4odGVzdEZldGNo
V2l0aFR3b0N5Y2xlKCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpKTsKKyAg
ICBSVU4odGVzdEltcG9ydE1vZHVsZVR3aWNlKCkpOworICAgIFJVTih0ZXN0TW9kdWxlQnl0ZWNv
ZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkpOworICAgIFJV
Tih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcigpKTsKKyAgICBSVU4odGVzdFByb2dy
YW1KU1NjcmlwdEV4Y2VwdGlvbigpKTsKIAotICAgIHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRl
U2NyaXB0VVJMKCk7Ci0gICAgdGVzdEZldGNoKCk7Ci0gICAgdGVzdEZldGNoV2l0aFR3b0N5Y2xl
KCk7Ci0gICAgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKTsKLSAgICB0ZXN0SW1wb3J0TW9kdWxl
VHdpY2UoKTsKLSAgICB0ZXN0Qnl0ZWNvZGVDYWNoZSgpOworICAgIFJVTih0ZXN0TG9hZGVyUmVq
ZWN0c05pbFNjcmlwdFVSTCgpKTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRj
aCgpKTsKIAotICAgIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCk7Ci0gICAgdGVzdExv
YWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOworICAgIFJVTih0ZXN0SlNTY3JpcHRVUkwoKSk7CiAK
ICAgICAvLyBGaWxlIGxvYWRpbmcKLSAgICB0ZXN0TG9hZEJhc2ljRmlsZSgpOworICAgIFJVTih0
ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSgpKTsKKyAgICBSVU4odGVzdExvYWRCYXNpY0ZpbGUo
KSk7CiAKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcik7
Ci0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7Ci0gICAg
cHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7Ci0gICAgcHJvbWlz
ZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RMYXRlKTsKLSAgICBwcm9taXNlUmVqZWN0
T25KU0V4Y2VwdGlvbigpOwotICAgIHByb21pc2VDcmVhdGVSZXNvbHZlZCgpOwotICAgIHByb21p
c2VDcmVhdGVSZWplY3RlZCgpOwotICAgIHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCk7Cisg
ICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUVhZ2VyKSk7Cisg
ICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpKTsKKyAg
ICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSkpOworICAg
IFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUpKTsKKyAgICBS
VU4ocHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKSk7CisgICAgUlVOKHByb21pc2VDcmVhdGVS
ZXNvbHZlZCgpKTsKKyAgICBSVU4ocHJvbWlzZUNyZWF0ZVJlamVjdGVkKCkpOworICAgIFJVTihw
YXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpKTsKIAogICAgIHRlc3RPYmplY3RpdmVDQVBJTWFp
bigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2Ny
aXB0cy9mb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpU2NyaXB0cy9mb28uanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitpbXBvcnQgIi4vYmFyLmpzIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODg0LDYgKzg4
NCw3IEBACiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzExMDAx
OTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCNzE5QTI4
OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlm
aWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSAq
LzsgfTsKIAkJNTMwQTY2QkExRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2Qjgx
RkEzRTc3RTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovOyB9OwpAQCAtMTE2MCw2
ICsxMTYxLDcgQEAKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTgwQzE2RDFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4MEMxNkIxRTNB
OTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTg2OTQzQjFGOEMwQUNDMDA5
MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5
ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5
IC8qIEpTQmFzZUludGVybmFsLmggKi87IH07CiAJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRGQiAv
KiBKU0ZpeGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTlFRjdDNDFDNTZF
RDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjAyOSw2ICsyMDMxLDcgQEAKIAkJCWRzdFBhdGggPSB0ZXN0YXBp
U2NyaXB0czsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKIAkJCWZpbGVzID0gKAorCQkJCTUy
RDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAvKiBmb28uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAq
LywKIAkJCQk1M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBw
b3J0IFNjcmlwdCAqLywKIAkJCQlGRUNCOEIyQTFEMjVDQjVBMDA2RjI0NjMgLyogdGVzdGFwaS1m
dW5jdGlvbi1vdmVycmlkZXMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1REJC
MTUxQjEzMUQwQjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0
ICovLApAQCAtMzM3Nyw2ICszMzgwLDcgQEAKIAkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8q
IFJ1bnRpbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI2MTlBMjg5ODUwMDY5
QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVByb2ZpbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBU
eXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZv
by5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzBBNjM0MDFGQTNFMzFDMDAyNkE1NDUgLyogU291cmNlc0Nv
Y29hLnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTb3VyY2VzQ29jb2EudHh0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc3Miw2ICszNzc2LDcgQEAKIAkJNzk4MEMxNkIxRTNB
OTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBwYXRoID0g
ZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzk4Njk0MzkxRjhDMEFDNzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzk4Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0Jhc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRml4ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaXhlZEFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BD
VG9PcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQQ1RvT3Jp
Z2luTWFwLmg7IHBhdGggPSBiMy9CM1BDVG9PcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU5OTUsNiArNjAwMCw3IEBACiAJCQkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2
OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5tbSAqLywKIAkJCQkxNDIxMzU5QTBBNjc3RjRGMDBB
ODE5NUUgLyogSlNCYXNlLmNwcCAqLywKIAkJCQkxNDI3MTEzODBBNDYwQkJCMDA4MEVFRUEgLyog
SlNCYXNlLmggKi8sCisJCQkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi8sCiAJCQkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUu
aCAqLywKIAkJCQkxNDQwRjhBRDBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcCAqLywKIAkJCQkxNDQwRjhBQzBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmggKi8sCkBAIC02MzQwLDYgKzYzNDYsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMu
anMgKi8sCisJCQkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLywKIAkJCSk7
CiAJCQluYW1lID0gdGVzdGFwaVNjcmlwdHM7CiAJCQlwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGlT
Y3JpcHRzOwpAQCAtOTc1OCw2ICs5NzY1LDcgQEAKIAkJCQkwRkY0Mjc0ODE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2X3N5bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDkxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzkxNzk5
RTRCMjAwRDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Nzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsOCBAQCBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZUJ5dGVjb2RlKFZNJiB2bSwgCiAgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZTsK
IAogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2ZWx5
R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCBz
b3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxD
b250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBpZiAoIXVubGlua2VkQ29kZUJs
b2NrKQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2
bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBl
LCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOwogfQogCkBAIC0xMTgsNiAr
MTIwLDggQEAgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTQogICAgIEV2
YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CiAK
ICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdl
bmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2
bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBl
dmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgaWYgKCF1bmxpbmtlZENv
ZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNv
ZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpNb2R1bGVU
eXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362644</attachid>
            <date>2019-02-21 14:16:49 -0800</date>
            <delta_ts>2019-02-21 15:18:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>64427</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAor
T0JKQ19DTEFTUyBKU1NjcmlwdDsKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQVBJR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKQEAgLTU1LDYgKzU3LDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CiAKKyAgICBKU1ZhbHVl
IGxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2Ny
aXB0ICopOworCiBwcml2YXRlOgogICAgIEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSUdsb2JhbE9iamVjdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsMTAgQEAKICNpbXBvcnQgIkVycm9yLmgiCiAjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZS5oIgog
I2ltcG9ydCAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2ltcG9ydCAiSlNOYXRpdmVT
dGRGdW5jdGlvbi5oIgorI2ltcG9ydCAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBvcnQgIkpT
U2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTU291cmNlQ29kZS5oIgogI2ltcG9ydCAiSlNW
YWx1ZUludGVybmFsLmgiCkBAIC00Myw3ICs0NSw2IEBACiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29y
ZS5oIgogI2ltcG9ydCAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbXBvcnQgIlNvdXJjZU9yaWdp
bi5oIgotCiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzUsMTIg
Kzc2LDE4IEBAIElkZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWQKICAgICBB
U1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpOwogICAgIFN0cmluZyBuYW1l
ID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKIAotICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwg
anNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlHZXRWYWx1ZSgpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwotCi0gICAgVVJMIHVybCA9IFVSTChyZWZl
cnJlclVSTCwgbmFtZSk7Ci0gICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgaWYgKEpTU3RyaW5nKiByZWZl
cnJlclN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2bSwgcmVmZXJyZXIpKSB7Cisg
ICAgICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwgcmVmZXJyZXJTdHJpbmctPnZhbHVlKGV4ZWMp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAg
ICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVSTCB1cmwgPSBVUkwoVVJMKCksIG5hbWUp
OworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7CisgICAgfQogCiAgICAgdGhyb3dWTUVycm9yKGV4
ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0gdmFsaWQgVVJMIGZyb20gaWRlbnRpZmllciBhbmQg
YmFzZSJfcyk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTE2Miw5ICsxNjksOSBAQCBKU0ludGVybmFs
UHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+
cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVk
LiIpKTsKIAogICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7Ci0gICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8
SlNTdHJpbmc+KHZtLCBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0
byogcmVzb2x2ZSA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCAxLCAicmVzb2x2ZSIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVj
dHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0ds
b2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsK
ICAgICAgICAgaWQgc2NyaXB0ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSkpOwogCkBAIC0xNzUsNyArMTgyLDMyIEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW8KICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNV
bmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2Fz
dDxKU1NjcmlwdCAqPihzY3JpcHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKKyAgICAgICAg
SlNTY3JpcHQqIGpzU2NyaXB0ID0gc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KTsKKwor
ICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtqc1NjcmlwdCBqc1NvdXJjZUNvZGVdOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoW2pzU2NyaXB0IHR5cGVdICE9IGtKU1NjcmlwdFR5cGVNb2R1
bGUpKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWFr
ZVN0cmluZygiVGhlIEpTU2NyaXB0IHRoYXQgd2FzIHByb3ZpZGVkIGRpZCBub3QgaGF2ZSBleHBl
Y3RlZCB0eXBlIG9mIGtKU1NjcmlwdFR5cGVNb2R1bGUuIikpKTsKKyAgICAgICAgICAgIGNhbGwo
ZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3Ms
ICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlIFNQ
SSB3ZSdyZSBkZXByZWNhdGluZyBkaWQgbm90IHJlcXVpcmUgc291cmNlVVJMLCBzbyB3ZSBqdXN0
CisgICAgICAgIC8vIGlnbm9yZSB0aGlzIGNoZWNrIGZvciBzdWNoIHVzZSBjYXNlcyB1bnRpbCB3
ZSBjYW4gcmVtb3ZlIHRoYXQgU1BJLiBPbmNlCisgICAgICAgIC8vIHdlIGRvIHRoYXQsIHdlIGNh
biByZW1vdmUgdGhlIG51bGwgY2hlY2sgZm9yIHNvdXJjZVVSTDoKKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDkwOQorICAgICAgICBpZiAoTlNV
UkwgKnNvdXJjZVVSTCA9IFtqc1NjcmlwdCBzb3VyY2VVUkxdKSB7CisgICAgICAgICAgICBTdHJp
bmcgb2xkTW9kdWxlS2V5IHsgW3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gfTsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgb2xkTW9kdWxlS2V5
KSAhPSBtb2R1bGVLZXkpKSB7CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBwcm92aWRlZCBm
b3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycywgcHJldmlvdXNseTogIiwgb2xkTW9kdWxlS2V5
LCAiIGFuZCBub3c6ICIsIG1vZHVsZUtleS5zdHJpbmcoKSkpKTsKKyAgICAgICAgICAgICAgICBj
YWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBh
cmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFtqc1NjcmlwdCBzZXRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6c3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4obW9kdWxlS2V5LnN0cmluZygpKV1dOworICAgICAg
ICAgICAgc291cmNlID0gW2pzU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdOworICAg
ICAgICB9CisKKyAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKICAgICAgICAgY2FsbChleGVj
LCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJU
aGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNV
bmRlZmluZWQoKTsKICAgICB9KTsKQEAgLTIxMCw2ICsyNDIsMjIgQEAgSlNPYmplY3QqIEpTQVBJ
R2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZQogICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKIH0K
IAorSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1
bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlNTY3JpcHQgKnNjcmlwdCkKK3sKKyAgICBBU1NFUlQo
c2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CisgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSWRlbnRpZmllciBrZXkgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyB7IFtbc2NyaXB0IHNvdXJjZVVSTF0gYWJz
b2x1dGVTdHJpbmddIH0pOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gaW1wb3J0
TW9kdWxlKGV4ZWMsIGtleSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTUHJvbWlz
ZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgdGhpcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICByZXN1bHQtPnJlc29sdmUoZXhlYywgcHJvbWlzZSk7CisgICAg
cmV0dXJuIHJlc3VsdC0+cHJvbWlzZSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBKU0NfT0JKQ19B
UElfRU5BQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNp
b24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlICJKU0Jhc2VJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpT
QmFzZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKQEAgLTQ3LDI1ICs0OCwxNSBA
QAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQo
SlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGNv
bnN0IEpTTG9ja0hvbGRlciYsIEV4ZWNTdGF0ZSogZXhlYywgSlNDb250ZXh0UmVmIGN0eCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKCFjdHgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oY3R4KTsKIAogICAgIEpTT2JqZWN0KiBqc1RoaXNP
YmplY3QgPSB0b0pTKHRoaXNPYmplY3QpOwogCi0gICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3Rk
OjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLQogICAgIC8vIGV2YWx1YXRlIHNldHMgInRo
aXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGlmIGl0IGlzIE5VTEwKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xv
YmFsT2JqZWN0KGV4ZWMpOwotICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8g
c291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOwotICAgIFNvdXJjZUNvZGUgc291cmNlID0g
bWFrZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJp
bmcgfSwgVVJMKHsgfSwgc291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkp
KTsKLQogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBK
U1ZhbHVlIHJldHVyblZhbHVlID0gcHJvZmlsZWRFdmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgUHJvZmlsaW5nUmVhc29uOjpBUEksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKIApAQCAtODAsNyArNzEsNyBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVh
dGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgICAgIC8vIFdlIGNvdWxkIHN0YXNoIGl0IGluIHRo
ZSBpbnNwZWN0b3IgaW4gY2FzZSBhbiBpbnNwZWN0b3IgaXMgZXZlciBvcGVuZWQuCiAgICAgICAg
IGdsb2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKHJldHVyblZhbHVlKQpAQCAt
OTAsNiArODEsMjQgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgog
ICAgIHJldHVybiB0b1JlZihleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBK
U0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdM
aW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFjdHgpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIHN0YXJ0aW5nTGluZU51
bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7CisKKyAgICBhdXRvIHNvdXJj
ZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsK
KyAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291
cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyks
IFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5l
TnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CisKKyAgICByZXR1cm4gSlNFdmFsdWF0ZVNjcmlw
dEludGVybmFsKGxvY2tlciwgZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlv
bik7Cit9CisKIGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0
cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmICghY3R4KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgor
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTTG9ja0hvbGRlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsK
K30KKworZXh0ZXJuICJDIiBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25z
dCBKU0M6OkpTTG9ja0hvbGRlciYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHJl
dmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkFQSUNhc3QuaCIK
ICNpbXBvcnQgIkNvbXBsZXRpb24uaCIKKyNpbXBvcnQgIkpTQmFzZUludGVybmFsLmgiCiAjaW1w
b3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpAQCAtMTEyLDEwICsxMTMsMzggQEAgLSAoSlNWYWx1ZSAq
KWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKQogCiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQog
ICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZh
bHVlXTsKLQogICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJlc3VsdCBp
bkNvbnRleHQ6c2VsZl07CiB9CiAKKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1Nj
cmlwdCAqKXNjcmlwdAoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRl
eHQpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOworCisgICAgaWYgKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVQcm9n
cmFtKSB7CisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSBudWxscHRyOworICAg
ICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIs
IGV4ZWMsIG1fY29udGV4dCwgbnVsbHB0ciwgW3NjcmlwdCBqc1NvdXJjZUNvZGVdLT5zb3VyY2VD
b2RlKCksICZleGNlcHRpb25WYWx1ZSk7CisKKyAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRp
b25WYWx1ZV07CisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnJl
c3VsdCBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
SlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBUElHbG9iYWxPYmplY3QqPih2bSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246W0pTVmFs
dWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIkNvbnRleHQgZG9lcyBub3Qgc3VwcG9y
dCBtb2R1bGUgbG9hZGluZyIgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4dDpzZWxmXTsKKworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkpTVmFsdWUg
cmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5sb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShsb2Nr
ZXIsIHNjcmlwdCk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uVmFsdWUgPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFs
dWUoKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNlUmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6ZXhjZXB0aW9uVmFsdWUgaW5Db250ZXh0OnNlbGZdIGluQ29udGV4
dDpzZWxmXTsKKyAgICB9CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYodm0sIHJlc3VsdCkgaW5Db250ZXh0OnNlbGZdOworfQorCiAtICh2b2lkKXNldEV4Y2Vw
dGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KG1fY29udGV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBACiAv
KiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWlu
ZyB0byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBm
b3IgY29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLwogQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0
ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEp
KTsKIAorLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSdW4gYSBKU1NjcmlwdC4KKyBAcGFyYW0g
c2NyaXB0IHRoZSBKU1NjcmlwdCB0byBldmFsdWF0ZS4KKyBAZGlzY3Vzc2lvbiBJZiB0aGUgcHJv
dmlkZWQgSlNTY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBKU1NjcmlwdFR5cGVQcm9ncmFtLCB0aGUg
c2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGV2
YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNyZWF0ZWQgd2l0aCBK
U1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkg
YW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFu
eSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3
aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQgaGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRl
bGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVsZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2
YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRpb24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFs
dWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlwdDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxN
YWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1NjcmlwdFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29u
c3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlvbiB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNv
bnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3JhbSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2
YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRo
ZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0s
CisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRSht
YWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQogQGludGVyZmFjZSBKU1Njcmlw
dCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu
b3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoU291cmNl
VVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAo
bnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKworLyohCisgVGhpcyBT
UEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2UgInNjcmlwdE9mVHlw
ZTppblZpcnR1YWxNYWNoaW5lOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0aFNvdXJjZVVS
TDphbmRCeXRlY29kZUNhY2hlOmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUg
TlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwg
KiljYWNoZVBhdGg7CisKKy8qIQorIFRoaXMgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu
b3QgYmUgdXNlZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4
RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5l
ICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBh
bmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKworLyohCiAgQG1l
dGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0
dWFsIG1hY2hpbmUuCi0gQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNlIHdoZW4g
dGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB0eXBlIFRoZSB0
eXBlIG9mIEphdmFTY3JpcHQgc291cmNlLgogIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUg
c291cmNlIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRo
aXMgaXMgdGhlIG1vZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBj
b2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBA
cGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNo
b3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gT24gY3JlYXRpb24sIHdlIHVzZSB0aGlz
IHBhdGggdG8gbG9hZCB0aGUgY2FjaGVkIGJ5dGVjb2RlIG9mZiBkaXNrLiBJZiB0aGUgY2FjaGVk
IGJ5dGVjb2RlIGF0IHRoaXMgbG9jYXRpb24gaXMgc3RhbGUsIHlvdSBzaG91bGQgZGVsZXRlIHRo
YXQgZmlsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGNvbnN0cnVjdG9yLgorIEBwYXJhbSBlcnJvciBB
IGRlc2NyaXB0aW9uIG9mIHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRo
ZSByZXN1bHQgaXMgbmlsLgogIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1c3Npb24g
VGhlIGZpbGUgYXQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBm
b3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6
KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bSB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRTb3VyY2U6KE5TU3RyaW5nICop
c291cmNlIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGVycm9y
OihvdXQgTlNFcnJvciAqIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAogLyohCiAgQG1l
dGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0
dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2Fj
aGluZy4KLSBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpT
IHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZh
U2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlw
dCBjYW4gYmUgZXZhbHVhdGVkIGluLgotIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29u
dGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24g
ZGlzay4KLSBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUg
dGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcGFyYW0gZmlsZVBh
dGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24g
ZGlzay4KKyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0ZSB3aXRo
IHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50aWZpZXIu
CisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBW
TSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3ZSB1c2Ug
dGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYgdGhlIGNh
Y2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxkIGRlbGV0
ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KKyBAcGFyYW0gZXJy
b3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3JlYXRlZCBp
ZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgotIEBkaXNjdXNz
aW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2FjaGVQYXRo
IHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3ljbGUgb2Yg
dm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90IHVzZWQg
Y3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUuCisgQGRp
c2N1c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBi
ZSBleHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZtLiBUaGlzIG1ldGhv
ZCB3aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUgc291cmNlLgogCiAgSWYgdGhlIGZp
bGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG5pbC4K
ICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxsYWJsZSBpbnN0YW5jZXR5
cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxl
UGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihu
dWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUg
KiBfTnVsbGFibGUpZXJyb3I7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ2FjaGUgdGhl
IGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IHRvIGRpc2sgYXQgdGhlIHBhdGggcGFzc2VkIGlu
IGR1cmluZyBjcmVhdGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhl
IHNjcmlwdCBjb3VsZCBub3QgYmUgY2FjaGVkIGlmIHRoZSByZXN1bHQgaXMgRkFMU0UuCisgKi8K
Ky0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUg
KiBfTnVsbGFibGUpZXJyb3I7CiAKIC8qIQotIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgZXF1
aXZhbGVudCB0byBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVT
aWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6LgorIEBtZXRob2QKKyBAYWJzdHJhY3QgUmV0dXJucyB0
aGUgSlNTY3JpcHRUeXBlIG9mIHRoaXMgSlNTY3JpcHQuCiAgKi8KLSsgKG51bGxhYmxlIGluc3Rh
bmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNV
UkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKilj
YWNoZVBhdGg7CistIChKU1NjcmlwdFR5cGUpdHlwZTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0
cmFjdCBSZXR1cm5zIHRoZSBzb3VyY2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KKyAqLworLSAoTlNV
UkwgKilzb3VyY2VVUkw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTYgQEAKICNpbXBvcnQg
IlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAgIF9fd2VhayBKU1ZpcnR1YWxNYWNo
aW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0VHlwZSBtX3R5cGU7CisgICAgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3VyY2U7CiAgICAgU3RyaW5nIG1fc291
cmNlOworICAgIFJldGFpblB0cjxOU1VSTD4gbV9zb3VyY2VVUkw7CiAgICAgUmV0YWluUHRyPE5T
VVJMPiBtX2NhY2hlUGF0aDsKICAgICBKU0M6OkNhY2hlZEJ5dGVjb2RlIG1fY2FjaGVkQnl0ZWNv
ZGU7CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNvZGU+IG1fanNTb3VyY2VDb2RlOwpA
QCAtNTMsNiArNTcsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJp
CiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKICAgICByZXN1bHQtPm1fdmly
dHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IGtKU1NjcmlwdFR5cGVNb2R1
bGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAsMTIgKzk1LDEzIEBAIHN0YXRpYyBi
b29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUKIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlw
dEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmluZ1BhdGgg
YW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVTaWduaW5n
UGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisKICAgICBVUkwgZmlsZVBhdGhV
UkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CiAgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2Fs
RmlsZSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBt
bWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQgaW50byBk
aXJ0eSBtZW1vcnkuCisKICAgICBWZWN0b3I8TENoYXI+IGJ1ZmZlcjsKICAgICBpZiAoIWZpbGxC
dWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKSwgYnVm
ZmVyKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEwNiw4ICsxMTIsNyBAQCArIChpbnN0YW5j
ZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVCiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5tX3ZpcnR1
YWxNYWNoaW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmVz
dWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKLSAgICBbcmVzdWx0IHJlYWRDYWNoZV07Cisg
ICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTExNiw2ICsxMjEsNTMgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21V
VEY4RmlsZTooTlNVUgogICAgIHJldHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpm
aWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1Bh
dGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwogfQogCitzdGF0aWMgSlNTY3JpcHQgKmNy
ZWF0ZUVycm9yKE5TU3RyaW5nICptZXNzYWdlLCBOU0Vycm9yKiogZXJyb3IpCit7CisgICAgaWYg
KGVycm9yKQorICAgICAgICAqZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJKU1Nj
cmlwdEVycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86QHsgQCJtZXNzYWdlIjogbWVzc2FnZSB9
XTsKKyAgICByZXR1cm4gbmlsOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihK
U1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0g
d2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kU291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBlcnJvcjoob3V0IE5TRXJy
b3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIEpTU2NyaXB0ICpy
ZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHJlc3Vs
dC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAg
ICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJlc3VsdC0+bV9zb3VyY2VVUkwgPSBz
b3VyY2VVUkw7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKKyAgICBbcmVz
dWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworKyAoaW5zdGFuY2V0eXBl
KXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBh
dGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNV
UkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VE
X1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJM
XSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJGaWxlIHBhdGggJUAgaXMg
bm90IGEgbG9jYWwgZmlsZSIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGZpbGVQYXRoVVJMKV0s
IGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIFN0cmluZyBzeXN0ZW1Q
YXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsKKyAgICBGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFwcGVkLiIsIHN0YXRpY19jYXN0PE5T
U3RyaW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisgICAgaWYgKCFjaGFyYWN0ZXJzQXJl
QWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSks
IGZpbGVEYXRhLnNpemUoKSkpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIk5vdCBhbGwgY2hhcmFjdGVycyBpbiBmaWxlIGF0ICVAIGFyZSBB
U0NJSS4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKwor
ICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25zdCBMQ2hhcio+KGZpbGVEYXRhLmRh
dGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3VsdC0+bV9tYXBwZWRTb3VyY2UgPSBX
VEZNb3ZlKGZpbGVEYXRhKTsKKyAgICByZXN1bHQtPm1fc291cmNlVVJMID0gc291cmNlVVJMOwor
ICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7CisgICAgW3Jlc3VsdCByZWFkQ2Fj
aGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlm
IChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQpA
QCAtMTUyLDIyICsyMDQsMjYgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBtX2NhY2hlZEJ5dGVj
b2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OwogfQogCi0tICh2b2lk
KXdyaXRlQ2FjaGUKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKill
cnJvcgogewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8fCAhbV9jYWNoZVBhdGgp
Ci0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgZXJyb3JTdHJpbmcgeyB9OworICAgIFtzZWxm
IHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICghZXJyb3JTdHJpbmcuaXNOdWxsKCkp
IHsKKyAgICAgICAgY3JlYXRlRXJyb3IoZXJyb3JTdHJpbmcsIGVycm9yKTsKKyAgICAgICAgcmV0
dXJuIE5POworICAgIH0KIAotICAgIEpTQzo6UGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgbV9jYWNo
ZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5l
LnZtLCBtX2pzU291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBlcnJvcik7Ci0gICAgaWYgKGVycm9y
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQ
YXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7Ci0gICAgaWYg
KGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tf
RVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICB3cml0ZShmZCwgbV9jYWNoZWRC
eXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKLSAgICBjbG9zZShmZCk7
CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoTlNVUkwgKilzb3VyY2VVUkwKK3sKKyAgICByZXR1
cm4gbV9zb3VyY2VVUkwuZ2V0KCk7Cit9CisKKy0gKEpTU2NyaXB0VHlwZSl0eXBlCit7CisgICAg
cmV0dXJuIG1fdHlwZTsKIH0KIAogQGVuZApAQCAtMTg5LDI0ICsyNDUsNzUgQEAgLSAoY29uc3Qg
SlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZQogICAgIHJldHVybiAmbV9jYWNoZWRCeXRl
Y29kZTsKIH0KIAotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooY29uc3QgSlND
OjpJZGVudGlmaWVyJiltb2R1bGVLZXkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNv
ZGUKIHsKLSAgICBpZiAobV9qc1NvdXJjZUNvZGUpIHsKLSAgICAgICAgQVNTRVJUKG1vZHVsZUtl
eS5pbXBsKCkgPT0gbV9tb2R1bGVLZXkpOworICAgIGlmIChtX2pzU291cmNlQ29kZSkKICAgICAg
ICAgcmV0dXJuIG1fanNTb3VyY2VDb2RlLmdldCgpOworCisgICAgcmV0dXJuIFtzZWxmIGZvcmNl
UmVjcmVhdGVKU1NvdXJjZUNvZGVdOworfQorCistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYp
ZXJyb3IKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIHJldHVy
biBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7CisgICAgICAgIGVycm9yID0gIk5vIGNh
Y2hlIHdhcyBwYXRoIHByb3ZpZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBKU1Njcmlw
dC4iX3M7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBKU0M6OlBhcnNlckVycm9y
IHBhcnNlckVycm9yOworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBrSlNTY3JpcHRU
eXBlTW9kdWxlOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJj
ZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtKU1Njcmlw
dFR5cGVQcm9ncmFtOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZUJ5
dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpzU291cmNlQ29kZV0tPnNvdXJjZUNv
ZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocGFy
c2VyRXJyb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSB7IH07Cisg
ICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5hYmxlIHRvIGdlbmVyYXRlIGJ5dGVjb2RlIGZv
ciB0aGlzIEpTU2NyaXB0IGJlY2F1c2Ugb2YgYSBwYXJzZXIgZXJyb3I6ICIsIHBhcnNlckVycm9y
Lm1lc3NhZ2UoKSk7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBpbnQgZmQgPSBv
cGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2
NjYpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVu
YWJsZSB0byBvcGVuIGZpbGU6ICIsIFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCAiIGR1
ZSB0byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5POwogICAg
IH0KKyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Cisg
ICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0gIlVuYWJsZSB0byBsb2NrIHRoZSBj
YWNoZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2UuIl9zOworICAgIGVsc2UKKyAgICAg
ICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNp
emUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAhcmV0dXJuQ29kZTsKK30KKworLSAo
dm9pZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsCit7CisgICAgbV9zb3VyY2VVUkwgPSB1cmw7
Cit9CiAKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlCit7
CiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbiB7IH07
Ci0gICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gSlNTY3Jp
cHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNlT3JpZ2luKG1vZHVsZUtl
eS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigp
LCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKKworICAgIFN0cmluZyB1
cmwgPSBTdHJpbmcgeyBbW3NlbGYgc291cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfTsKKyAgICBh
dXRvIHR5cGUgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSA/IEpTQzo6U291cmNlUHJv
dmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUgOiBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
UHJvZ3JhbTsKKyAgICBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIg
PSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2VsZiwgSlNDOjpTb3VyY2VPcmlnaW4o
dXJsKSwgVVJMKHsgfSwgdXJsKSwgc3RhcnRQb3NpdGlvbiwgdHlwZSk7CiAgICAgSlNDOjpTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24u
bV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQo
KSk7CiAgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VD
b2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwogICAgIG1fanNTb3VyY2VDb2Rl
LnNldCh2bSwganNTb3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3cml0ZUNhY2hlXTsKICAgICByZXR1
cm4ganNTb3VyY2VDb2RlOwogfQogCiBAZW5kCiAKLQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkocmV2aXNpb24gMjQxODY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDggKzQ2LDEyIEBAIGNsYXNzIFN0cmluZzsKIAogLSAodW5zaWduZWQpaGFz
aDsKIC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7Ci0tIChjb25zdCBKU0M6OkNhY2hlZEJ5
dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNv
ZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5OworLSAobnVsbGFibGUgY29uc3Qg
SlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7CistIChKU0M6OkpTU291cmNlQ29k
ZSopanNTb3VyY2VDb2RlOworLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2UgcmVxdWlyZSBz
b3VyY2VVUkwgdXBvbiBjcmVhdGlvbjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NDkwOQorLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWZvcmNlUmVjcmVhdGVKU1NvdXJj
ZUNvZGU7CistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CistICh2b2lkKXNldFNv
dXJjZVVSTDooTlNVUkwgKil1cmw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAko
cmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5j
dGlvbk92ZXJyaWRlc1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGlu
dCB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKQogCiAgICAgY29uc3QgY2hhciogb2xkRnVuY3Rpb25P
dmVycmlkZXMgPSBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpOwogICAgIAotICAgIE9wdGlv
bnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkgPSAidGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMi
OworICAgIE9wdGlvbnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkgPSAiLi90ZXN0YXBpU2NyaXB0cy90
ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyI7CiAgICAgSlNDOjpGdW5jdGlvbk92ZXJyaWRl
czo6cmVpbnN0YWxsT3ZlcnJpZGVzKCk7CiAKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAobnVsbHB0ciwgbnVsbHB0cik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMjQx
ODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDExICs0MCwxOCBAQAogI2luY2x1ZGUgIkpTU2NyaXB0UmVmUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nUmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkpTV2Vha1By
aXZhdGUuaCIKKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgor
I2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHRp
bWUuaD4KKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKICNpZiBPUyhXSU5ET1dTKQpAQCAtNjcsNyArNzQs
NyBAQAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2JqZWN0
aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogI2Vu
ZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4MCwx
MSArMTM4NywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNldEVy
cm9yTW9kZSgwKTsKICNlbmRpZgogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICB0ZXN0
T2JqZWN0aXZlQ0FQSSgpOworI2lmICFPUyhXSU5ET1dTKQorICAgIGNoYXIgcmVzb2x2ZWRQYXRo
W1BBVEhfTUFYXTsKKyAgICByZWFscGF0aChhcmd2WzBdLCByZXNvbHZlZFBhdGgpOyAKKyAgICBj
aGFyKiBuZXdDV0QgPSBkaXJuYW1lKHJlc29sdmVkUGF0aCk7CisgICAgaWYgKGNoZGlyKG5ld0NX
RCkpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiQ291bGQgbm90IGNoZGlyIHRvOiAlc1xuIiwg
bmV3Q1dEKTsKICNlbmRpZgogCiAgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEgPyBh
cmd2WzFdIDogTlVMTDsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIHRlc3RPYmplY3Rp
dmVDQVBJKGZpbHRlcik7CisjZW5kaWYKKwogICAgIFJFTEVBU0VfQVNTRVJUKCF0ZXN0Q0FQSVZp
YUNwcChmaWx0ZXIpKTsKICAgICBpZiAoZmlsdGVyKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5
NzksNyArMTk5NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgSlNP
YmplY3RNYWtlQ29uc3RydWN0b3IoY29udGV4dCwgbnVsbENsYXNzLCAwKTsKICAgICBKU0NsYXNz
UmVsZWFzZShudWxsQ2xhc3MpOwogCi0gICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICJ0ZXN0
YXBpLmpzIjsKKyAgICBjb25zdCBjaGFyKiBzY3JpcHRQYXRoID0gIi4vdGVzdGFwaVNjcmlwdHMv
dGVzdGFwaS5qcyI7CiAgICAgY2hhciogc2NyaXB0VVRGOCA9IGNyZWF0ZVN0cmluZ1dpdGhDb250
ZW50c09mRmlsZShzY3JpcHRQYXRoKTsKICAgICBpZiAoIXNjcmlwdFVURjgpIHsKICAgICAgICAg
cHJpbnRmKCJGQUlMOiBUZXN0IHNjcmlwdCBjb3VsZCBub3QgYmUgbG9hZGVkLlxuIik7CkBAIC0y
MDgyLDEzICsyMDk3LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
ICAgIH0KICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKICAgICB9Ci0g
ICAgZmFpbGVkID0gdGVzdFR5cGVkQXJyYXlDQVBJKCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9
IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEZ1
bmN0aW9uT3ZlcnJpZGVzKCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RHbG9iYWxDb250
ZXh0V2l0aEZpbmFsaXplcigpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0UGluZ1BvbmdT
dGFja092ZXJmbG93KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RKU09OUGFyc2UoKSB8
fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoKSB8fCBm
YWlsZWQ7CisgICAgZmFpbGVkIHw9IHRlc3RUeXBlZEFycmF5Q0FQSSgpOworICAgIGZhaWxlZCB8
PSB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCk7CisgICAgZmFpbGVkIHw9IHRlc3RGdW5jdGlvbk92
ZXJyaWRlcygpOworICAgIGZhaWxlZCB8PSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXIo
KTsKKyAgICBmYWlsZWQgfD0gdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdygpOworICAgIGZhaWxl
ZCB8PSB0ZXN0SlNPTlBhcnNlKCk7CisgICAgZmFpbGVkIHw9IHRlc3RKU09iamVjdEdldFByb3h5
VGFyZ2V0KCk7CiAKICAgICAvLyBDbGVhciBvdXQgbG9jYWwgdmFyaWFibGVzIHBvaW50aW5nIGF0
IEpTT2JqZWN0UmVmcyB0byBhbGxvdyB0aGVpciB2YWx1ZXMgdG8gYmUgY29sbGVjdGVkCiAgICAg
ZnVuY3Rpb24gPSBOVUxMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQAogI2lt
cG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCisjaWYg
X19oYXNfaW5jbHVkZSg8bGlicHJvYy5oPikKKyNkZWZpbmUgSEFTX0xJQlBST0MgMQorI2ltcG9y
dCA8bGlicHJvYy5oPgorI2Vsc2UKKyNkZWZpbmUgSEFTX0xJQlBST0MgMAorI2VuZGlmCiAjaW1w
b3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5Rm9v
dHByaW50Lmg+CkBAIC01NCw3ICs2MCw3IEBAIGV4dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFzX3Np
Z25hdHVyZShpZCkKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQp
OwogCiBleHRlcm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQ
SSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKik7
CiBleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKiwgYm9vbCk7CiAKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRApAQCAtMTk4MCwyMiArMTk4NiwzMCBAQCBzdGF0aWMgdm9pZCB0
ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJ5dGVj
b2RlQ2FjaGUoKQorc3RhdGljIE5TVVJMICp0ZW1wRmlsZShOU1N0cmluZyAqc3RyaW5nKQorewor
ICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1RlbXBv
cmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgcmV0dXJuIFt0ZW1wRGlyZWN0
b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzdHJpbmddOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSgpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0g
ICAgICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgICAgIE5TU3RyaW5nICpm
b29Tb3VyY2UgPSBAImltcG9ydCAnb3RoZXJEaXJlY3RvcnkvYmF6LmpzJzsgZXhwb3J0IGxldCBu
ID0gbnVsbDsiOworICAgICAgICBOU1N0cmluZyAqYmFyU291cmNlID0gQCJpbXBvcnQgeyBuIH0g
ZnJvbSAnLi4vZm9vLmpzJzsgZXhwb3J0IGxldCBmb28gPSAoKSA9PiBuOyI7CisgICAgICAgIE5T
U3RyaW5nICpiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gJy4uL2RpcmVjdG9yeS9i
YXIuanMnOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7IjsK
IAotICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4u
L2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhclNv
dXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9
IG51bGw7IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0g
ZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBv
cnQgbGV0IGV4cCA9IGZvbzsiOworICAgICAgICBOU1VSTCAqZm9vUGF0aCA9IHRlbXBGaWxlKEAi
Zm9vLmpzIik7CisgICAgICAgIE5TVVJMICpiYXJQYXRoID0gdGVtcEZpbGUoQCJiYXIuanMiKTsK
KyAgICAgICAgTlNVUkwgKmJhelBhdGggPSB0ZW1wRmlsZShAImJhei5qcyIpOwogCi0gICAgICAg
IE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OkAiZm9vLmpzIl07Ci0gICAgICAgIE5TVVJMKiBiYXJQYXRoID0gW3RlbXBEaXJlY3Rvcnkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzIl07Ci0gICAgICAgIE5TVVJMKiBi
YXpQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6
LmpzIl07CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5j
YWNoZSIpOworICAgICAgICBOU1VSTCAqYmFyQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJiYXIuanMu
Y2FjaGUiKTsKKyAgICAgICAgTlNVUkwgKmJhekNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmF6Lmpz
LmNhY2hlIik7CiAKLSAgICAgICAgTlNVUkwqIGZvb0NhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcy5jYWNoZSJdOwotICAgICAgICBO
U1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiYmFyLmpzLmNhY2hlIl07Ci0gICAgICAgIE5TVVJMKiBiYXpDYWNoZVBhdGggPSBb
dGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXouanMuY2FjaGUi
XTsKKyAgICAgICAgTlNVUkwgKmZvb0Zha2VQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpA
Ii9mb28uanMiXTsKKyAgICAgICAgTlNVUkwgKmJhckZha2VQYXRoID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpAIi9kaXJlY3RvcnkvYmFyLmpzIl07CisgICAgICAgIE5TVVJMICpiYXpGYWtlUGF0
aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl07CiAK
ICAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1BhdGggYXRvbWljYWxseTpOTyBlbmNv
ZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAgW2JhclNvdXJj
ZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5n
RW5jb2RpbmcgZXJyb3I6bmlsXTsKQEAgLTIwMDMsMTMgKzIwMTcsMTkgQEAgc3RhdGljIHZvaWQg
dGVzdEJ5dGVjb2RlQ2FjaGUoKQogCiAgICAgICAgIGF1dG8gYmxvY2sgPSBeKEpTQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAq
cmVqZWN0KSB7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6
Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpblZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRC
eXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVu
dGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCi0gICAgICAgICAgICAg
ICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJ
RmlsZTpiYXJQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRo
Q29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoXV1dOwotICAgICAg
ICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhl
ckRpcmVjdG9yeS9iYXouanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhelBhdGggaW5WaXJ0dWFs
TWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0
ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICBKU1NjcmlwdCAqc2NyaXB0ID0gbmlsOworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpbZm9vRmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAgICAg
ICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUg
aW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6Zm9vUGF0aCB3aXRoU291cmNlVVJMOmZvb0Zha2VQYXRoIGFuZEJ5dGVjb2RlQ2Fj
aGU6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRp
ZmllciBpc0VxdWFsVG9PYmplY3Q6W2JhckZha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAg
ICAgICAgICAgICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBl
TW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBw
ZWRGcm9tQVNDSUlGaWxlOmJhclBhdGggd2l0aFNvdXJjZVVSTDpiYXJGYWtlUGF0aCBhbmRCeXRl
Y29kZUNhY2hlOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAo
W2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OltiYXpGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11d
KQorICAgICAgICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXpQYXRoIHdpdGhTb3VyY2VVUkw6YmF6RmFrZVBhdGgg
YW5kQnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKworICAgICAgICAgICAg
aWYgKHNjcmlwdCkgeworICAgICAgICAgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVjb2Rl
V2l0aEVycm9yOm5pbF0pCisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0
OmNvbnRleHRdXV07CiAgICAgICAgIH07CiAKQEAgLTIwMjMsMTIgKzIwNDMsNzkgQEAgc3RhdGlj
IHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgICAgICB9CiAKICAgICAgICAgTlNGaWxlTWFu
YWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAg
ICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsKLSAg
ICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07Ci0g
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5p
bF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRoIGVy
cm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQ
YXRoIGVycm9yOm5pbF07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IHRydWU7CisgICAgICAg
IHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVycm9y
Om5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwg
Jj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsK
KyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNh
Y2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciBy
ZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVz
dWx0KEAiUmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB0ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUoKQoreworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0gQCJmdW5jdGlv
biBmb28oKSB7IHJldHVybiA0MjsgfTsgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gNDA7IH07IGZv
bygpICsgYmFyKCk7IjsKKyAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxlKEAi
Zm9vLmpzLmNhY2hlIik7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3Jp
cHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJteS1wYXRo
Il0gYW5kU291cmNlOmZvb1NvdXJjZSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBpZiAoIVtz
Y3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpuaWxdKQorICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSB0cnVlOworICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFty
ZXN1bHQgaXNOdW1iZXJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgb2YgY2FjaGVk
IHByb2dyYW0gaXMgNDArNDIiLCBbW3Jlc3VsdCB0b051bWJlcl0gaW50VmFsdWVdID09IDQwICsg
NDIpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKKwor
ICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVkQWxsKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5bnRheEVycm9yKCkKK3sKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGF1dG8gdHlwZSkgeworICAgICAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpmb29Tb3VyY2UgPSBAInRoaXMgaXMgYSBzeW50YXgg
ZXJyb3IiOworICAgICAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxlKEAiZm9v
LmpzLmNhY2hlIik7CisgICAgICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2NyaXB0
IHNjcmlwdE9mVHlwZTp0eXBlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZSB3aXRoU291cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZFNvdXJj
ZTpmb29Tb3VyY2UgYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgICAgICBOU0Vycm9yICpl
cnJvciA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbc2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJy
b3I6JmVycm9yXSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZXJyb3IpOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJHb3QgZXJyb3Igd2hl
biB0cnlpbmcgdG8gY2FjaGUgYnl0ZWNvZGUgZm9yIGEgc2NyaXB0IHdpdGggYSBzeW50YXggZXJy
b3IuIiwgW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJVbmFibGUgdG8gZ2Vu
ZXJhdGUgYnl0ZWNvZGUgZm9yIHRoaXMgSlNTY3JpcHQgYmVjYXVzZSBvZiBhIHBhcnNlciBlcnJv
ciJdKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGVzdChrSlNTY3JpcHRUeXBlUHJvZ3JhbSk7
CisgICAgdGVzdChrSlNTY3JpcHRUeXBlTW9kdWxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFBy
b2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQyOyI7CisgICAgICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNj
cmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJteS1wYXRoIl0gYW5kU291cmNlOnNvdXJjZSBhbmRCeXRlY29kZUNhY2hl
Om5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAg
ICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBjb250ZXh0
LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICpleGNlcHRpb24pIHsK
KyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOworICAgICAgICAgICAgY2hlY2tSZXN1bHQo
QCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNob3VsZCBoYXZlIHRoZSBleGNlcHRp
b24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0Mik7
CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAg
ICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNlcHRpb24gc2hvdWxk
IHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1VuZGVmaW5lZF0pOworICAgICAgICBjaGVj
a1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIGNhbGwgZXhj
ZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlvbik7CiAgICAgfQogfQogCkBAIC0yMDc4
LDcgKzIxNjUsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0CiAK
IEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQorc3RhdGljIHZvaWQgdGVz
dExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAg
ICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250
ZXh0XTsKQEAgLTIwODksMzQgKzIxNzYsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNG
aWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQorCitAaW50ZXJmYWNl
IEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVs
ZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgewor
fQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9IFtb
SlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBm
ZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZl
SGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJl
amVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltpZGVu
dGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9m
VHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6
ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0
KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVs
c2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0
aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0
OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUo
KQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90IGNvdW50ID0gcHJvY19waWRpbmZvKGdl
dHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworI2VuZGlmCisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0TWVtb3J5TWFwcGVk
TG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMuanMnKTsiIHdpdGhTb3VyY2VVUkw6cmVz
b2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworI2lmIEhBU19MSUJQUk9DCisgICAgICAg
IHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RG
RFMsIDAsIDAsIDApOworI2VuZGlmCisgICAgICAgIGNoZWNrUmVzdWx0KEAiSlNTY3JpcHQgc2hv
dWxkIG5vdCBob2xkIGEgZmlsZSBkZXNjcmlwdG9yIiwgY291bnQgPT0gYWZ0ZXJDb3VudCk7Cisg
ICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9
CisjaWYgSEFTX0xJQlBST0MKKyAgICBzaXplX3QgYWZ0ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlk
KCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRl
c2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRlciBjb250ZXh0IGlzIGRlYWxsb2Nl
ZCIsIGNvdW50ID09IGFmdGVyKTsKKyNlbmRpZgorfQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEF1
Z21lbnRlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRl
PgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5
cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0QXVnbWVudGVk
TG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0g
KHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZp
ZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJl
c29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIFVOVVNFRF9Q
QVJBTShyZWplY3QpOworCisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBOU1N0cmluZyAqcGF0aFN0cmluZyA9IFtm
aWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107CisgICAgaWYgKFtwYXRoU3RyaW5nIGNvbnRhaW5zU3Ry
aW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0aFN0cmluZyBjb250YWluc1N0cmluZzpAImZvby5qcyJd
KSB7CisgICAgICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCB3aXRoU291cmNlVVJMOmZpbGVQYXRoIGFu
ZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNj
cmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoW3BhdGhTdHJpbmcgY29udGFpbnNTdHJp
bmc6QCJiYXIuanMiXSkgeworICAgICAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0
T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1
YWxNYWNoaW5lIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9ub3QvcGF0
aC90by9iYXIuanMiXSBhbmRTb3VyY2U6QCIiIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5p
bF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNh
bGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitAZW5kCisKK3N0YXRpYyB2b2lk
IHRlc3RKU1NjcmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1
dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4
dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAg
ICAgICBOU1VSTCAqYmFzaWMgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIi4vYmFzaWMuanMiIHJl
bGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTU2NyaXB0ICpz
Y3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmly
dHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlG
aWxlOmJhc2ljIHdpdGhTb3VyY2VVUkw6YmFzaWMgYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6
bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQxID0gW2NvbnRleHQgZXZhbHVhdGVKU1Nj
cmlwdDpzY3JpcHQxXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250
ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBOU1VSTCAqZm9vID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVsYXRpdmVUb1VSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygp
XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtK
U1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5l
IG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6Zm9vIHdpdGhTb3VyY2VVUkw6Zm9vIGFuZEJ5dGVj
b2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdDIp
OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQyID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpz
Y3JpcHQyXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgd2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0Y2giIHdpdGhBcmd1bWVudHM6QFteKEpT
VmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2FzUmVqZWN0ZWQgPSBbcmVhc29uIGlzT2Jq
ZWN0XTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtbcmVhc29uIHRvU3RyaW5nXSBjb250
YWluc1N0cmluZzpAIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBwcm92aWRlZCBmb3IgdHdvIGRpZmZl
cmVudCBpZGVudGlmaWVycyJdKTsKKyAgICAgICAgfV1dOworCisgICAgICAgIGNoZWNrUmVzdWx0
KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGggZGlmZmVyZW50IGlkZW50aWZpZXJzIGlz
IHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0KK30KKworI2RlZmluZSBSVU4odGVzdCkg
ZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgXAorICAgICAgICAgICAgYnJl
YWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwgI3Rlc3QpOyBcCisgICAgICAgIHRlc3Q7
IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIsICN0ZXN0KTsgXAorICAgIH0gd2hpbGUg
KGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqIGZpbHRlcikKIHsK
ICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJIik7CiAKLSAgICBjaGVja05lZ2F0
aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKTsKKyAgICBhdXRv
IHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdCkgLT4gYm9vbCB7CisgICAgICAgIGlm
IChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3RyY2FzZXN0cih0ZXN0LCBmaWx0ZXIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgUlVOKGNoZWNrTmVnYXRpdmVOU0lu
dGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkpOworCisgICAgUlVO
KHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0RmV0
Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpKTsKKyAgICBSVU4odGVzdEZl
dGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpKTsK
KyAgICBSVU4odGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUoKSk7CisgICAgUlVOKHRlc3RQcm9ncmFt
Qnl0ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJy
b3IoKSk7CisgICAgUlVOKHRlc3RQcm9ncmFtSlNTY3JpcHRFeGNlcHRpb24oKSk7CiAKLSAgICB0
ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOwotICAgIHRlc3RGZXRjaCgpOwot
ICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOwotICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xl
KCk7Ci0gICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7Ci0gICAgdGVzdEJ5dGVjb2RlQ2FjaGUo
KTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRl
c3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c05p
bFNjcmlwdFVSTCgpOwotICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKyAgICBS
VU4odGVzdEpTU2NyaXB0VVJMKCkpOwogCiAgICAgLy8gRmlsZSBsb2FkaW5nCi0gICAgdGVzdExv
YWRCYXNpY0ZpbGUoKTsKKyAgICBSVU4odGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKSk7Cisg
ICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlKCkpOwogCi0gICAgcHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVqZWN0RWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVzb2x2ZUxhdGUpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0
TGF0ZSk7Ci0gICAgcHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKTsKLSAgICBwcm9taXNlQ3Jl
YXRlUmVzb2x2ZWQoKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVqZWN0ZWQoKTsKLSAgICBwYXJhbGxl
bFByb21pc2VSZXNvbHZlVGVzdCgpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0
aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCkp
OworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7CisgICAgUlVOKHByb21pc2VDcmVh
dGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKSk7CiAK
ICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMv
Zm9vLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0ICIuL2Jhci5qcyI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTg4NCw2ICs4ODQsNyBAQAogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1
N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25D
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEy
ODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAvKiBmb28u
anMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovOyB9OwogCQk1MkY2QzM1
RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZC
OTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUg
LyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CiAJCTUzMEE2NkJBMUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlNC1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkI4MUZBM0U3N0UwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
NC1tbS5tbSAqLzsgfTsKQEAgLTExNjAsNiArMTE2MSw3IEBACiAJCTc5N0UwN0FBMUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg2OTQzQTFGOEMwQUM4
MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9OwogCQk3
OTg5Mzc3OTFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIg
LyogSlNGaXhlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMx
QzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAv
KiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMjksNiArMjAzMSw3
IEBACiAJCQlkc3RQYXRoID0gdGVzdGFwaVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0g
MTY7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpz
IGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZD
IC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1
Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3Vw
cG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGku
anMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKQEAgLTMzNzcsNiArMzM4MCw3IEBACiAJCTUy
QzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5
NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyRDEz
MDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZD
MzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYzNDAxRkEz
RTMxQzAwMjZBNTQ1IC8qIFNvdXJjZXNDb2NvYS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U291cmNlc0NvY29hLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NzIsNiAr
Mzc3Niw3IEBACiAJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAv
KiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJB
RSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyog
SlNCYXNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlSW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4
ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpeGVk
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFEQ0FCNTcz
MDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRml4ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdD
MzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2lu
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTk1LDYgKzYwMDAsNyBAQAog
CQkJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QubW0gKi8s
CiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJCQkJMTQy
NzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAorCQkJCTc5ODcyQzQ3MjIxQkJB
RUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovLAogCQkJCTE0MEQxN0Q2MEU4QUQ0QTkw
MDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCiAJCQkJMTQ0MEY4QUQwQTUwOEQyMDAwMDVG
MDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJMTQ0MEY4QUMwQTUwOEQy
MDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oICovLApAQCAtNjM0MCw2ICs2MzQ2
LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTNDM0Q1RTQy
MUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHRlc3RhcGlTY3JpcHRzOwogCQkJ
cGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0czsKQEAgLTk3NTgsNiArOTc2NSw3IEBACiAJ
CQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAy
M0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0
MjE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9u
IDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJh
dGVCeXRlY29kZShWTSYgdm0sIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUg
PSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CiAKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBk
ZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7
CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBy
ZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNv
dXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdn
ZXJNb2RlKTsKIH0KIApAQCAtMTE4LDYgKzEyMCw4IEBAIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRl
TW9kdWxlQnl0ZWNvZGUoVk0KICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0g
RXZhbENvbnRleHRUeXBlOjpOb25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJU
RFopOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNl
LCBTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVi
dWdnZXJNb2RlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362653</attachid>
            <date>2019-02-21 15:18:53 -0800</date>
            <delta_ts>2019-02-21 15:20:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>66132</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29u
ZmlnLmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjZGVmaW5lIEpTQ19BUElfQVZB
SUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pIEpTX0VYUE9SVAor
I2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8gVXNlIHplcm8gc2luY2UgaXQgd2ls
bCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24gbnVtYmVyLgogI2RlZmluZSBKU0Nf
TUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CisKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBKU0FQSUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CkBAIC01NSw2
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxv
YWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxv
YWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOwog
CisgICAgSlNWYWx1ZSBsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShjb25zdCBKU0xvY2tI
b2xkZXImLCBKU1NjcmlwdCAqKTsKKwogcHJpdmF0ZToKICAgICBKU0FQSUdsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDEwIEBACiAjaW1wb3J0ICJFcnJvci5oIgogI2ltcG9ydCAiRXhjZXB0
aW9uLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNJbnRlcm5h
bFByb21pc2UuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBv
cnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpTUHJvbWlzZURlZmVycmVkLmgi
CiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIK
ICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgpAQCAtNDMsNyArNDUsNiBAQAogI2ltcG9ydCAi
SmF2YVNjcmlwdENvcmUuaCIKICNpbXBvcnQgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW1wb3J0
ICJTb3VyY2VPcmlnaW4uaCIKLQogI2ltcG9ydCA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTc1LDEyICs3NiwyMCBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkCiAgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKTsKICAg
ICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CiAKLSAgICBVUkwgcmVmZXJy
ZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+dHJ5R2V0VmFsdWUoKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKLQotICAgIFVSTCB1
cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOwotICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIGlmIChK
U1N0cmluZyogcmVmZXJyZXJTdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odm0sIHJl
ZmVycmVyKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWZlcnJlclN0cmluZy0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIFVSTCByZWZlcnJlclVSTCh7IH0sIHZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVm
ZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAgICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJM
LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFVSTCB1cmwgPSBVUkwoeyB9LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAg
IH0KIAogICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlk
IFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UiX3MpOwogICAgIHJldHVybiB7IH07CkBAIC0x
NjIsOSArMTcxLDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptbwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAi
Tm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlz
ZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAg
IGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSog
ZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRo
YXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIApAQCAtMTc1LDcg
KzE4NCwzMiBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNv
ZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU2NyaXB0KiBqc1NjcmlwdCA9IHN0YXRpY19jYXN0
PEpTU2NyaXB0ICo+KHNjcmlwdCk7CisKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3VyY2UgPSBb
anNTY3JpcHQganNTb3VyY2VDb2RlXTsKKyAgICAgICAgaWYgKFVOTElLRUxZKFtqc1NjcmlwdCB0
eXBlXSAhPSBrSlNTY3JpcHRUeXBlTW9kdWxlKSkgeworICAgICAgICAgICAgYXJncy5hcHBlbmQo
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBw
cm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxl
LiIpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNl
RGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIp
OworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1
aXJlIHNvdXJjZVVSTCwgc28gd2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBm
b3Igc3VjaCB1c2UgY2FzZXMgdW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAg
ICAgICAvLyB3ZSBkbyB0aGF0LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3Vy
Y2VVUkw6CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ5MDkKKyAgICAgICAgaWYgKE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNl
VVJMXSkgeworICAgICAgICAgICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJz
b2x1dGVTdHJpbmddIH07CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIG9sZE1vZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkgeworICAgICAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJUaGUgc2Ft
ZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHBy
ZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5n
KCkpKSk7CisgICAgICAgICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJv
bWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4u
Li4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbanNTY3JpcHQgc2V0U291
cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KG1vZHVs
ZUtleS5zdHJpbmcoKSldXTsKKyAgICAgICAgICAgIHNvdXJjZSA9IFtqc1NjcmlwdCBmb3JjZVJl
Y3JlYXRlSlNTb3VyY2VDb2RlXTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3MuYXBwZW5kKHNv
dXJjZSk7CiAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZl
cnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOwog
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgfSk7CkBAIC0yMTAsNiAr
MjQ0LDIyIEBAIEpTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGUKICAgICBy
ZXR1cm4gbWV0YVByb3BlcnRpZXM7CiB9CiAKK0pTVmFsdWUgSlNBUElHbG9iYWxPYmplY3Q6Omxv
YWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2NyaXB0
ICpzY3JpcHQpCit7CisgICAgQVNTRVJUKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1
bGUpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsRXhlYygpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIElkZW50aWZpZXIga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcg
eyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSB9KTsKKyAgICBKU0ludGVybmFs
UHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1vZHVsZShleGVjLCBrZXksIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIHRoaXMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmVzdWx0LT5yZXNv
bHZlKGV4ZWMsIHByb21pc2UpOworICAgIHJldHVybiByZXN1bHQtPnByb21pc2UoKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNCYXNlLmgiCisjaW5jbHVkZSAiSlNCYXNl
SW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElD
YXN0LmgiCkBAIC00NywyNSArNDgsMTUgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNW
YWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNj
cmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQg
c3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitKU1ZhbHVlUmVmIEpT
RXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0xvY2tIb2xkZXImLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmICghY3R4KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgVU5VU0VEX1BBUkFNKGN0eCk7
CiAKICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0ID0gdG9KUyh0aGlzT2JqZWN0KTsKIAotICAg
IHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0K
ICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBp
cyBOVUxMCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKLSAgICBhdXRvIHNvdXJj
ZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsK
LSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291
cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyks
IFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5l
TnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7Ci0KICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2
YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHByb2ZpbGVkRXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIFByb2ZpbGluZ1JlYXNvbjo6QVBJLCBz
b3VyY2UsIGpzVGhpc09iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKQEAgLTgwLDcgKzcx
LDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgICAgICAv
LyBXZSBjb3VsZCBzdGFzaCBpdCBpbiB0aGUgaW5zcGVjdG9yIGluIGNhc2UgYW4gaW5zcGVjdG9y
IGlzIGV2ZXIgb3BlbmVkLgogICAgICAgICBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5k
aWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChyZXR1cm5WYWx1ZSkKQEAgLTkwLDYgKzgxLDI0IEBAIEpTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4
LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
IHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
dHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisKKyAgICBzdGFydGluZ0xpbmVOdW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVO
dW1iZXIpOworCisgICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBzb3VyY2VVUkwgPyBzb3VyY2VV
UkwtPnN0cmluZygpIDogU3RyaW5nKCk7CisgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291
cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBV
UkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXIoKSkpOworCisg
ICAgcmV0dXJuIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIsIGV4ZWMsIGN0eCwgdGhp
c09iamVjdCwgc291cmNlLCBleGNlcHRpb24pOworfQorCiBib29sIEpTQ2hlY2tTY3JpcHRTeW50
YXgoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1N0cmluZ1JlZiBzb3Vy
Y2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBpZiAoIWN0eCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
SW50ZXJuYWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9XZWJLaXRBdmFpbGFiaWxpdHkuaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0xvY2tI
b2xkZXI7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKK2V4dGVybiAiQyIgSlNWYWx1ZVJlZiBKU0V2
YWx1YXRlU2NyaXB0SW50ZXJuYWwoY29uc3QgSlNDOjpKU0xvY2tIb2xkZXImLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0
ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTExMiwx
MCArMTEzLDM4IEBAIC0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKikKIAog
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07Ci0KICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOwogfQogCistIChKU1ZhbHVl
ICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQKK3sKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIGlmIChzY3JpcHQu
dHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvblZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1
YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBtX2NvbnRleHQsIG51bGxwdHIsIFtzY3Jp
cHQganNTb3VyY2VDb2RlXS0+c291cmNlQ29kZSgpLCAmZXhjZXB0aW9uVmFsdWUpOworCisgICAg
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworICAgICAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworICAgIH0KKwor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQVBJR2xv
YmFsT2JqZWN0Kj4odm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNl
UmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgbW9kdWxlIGxvYWRpbmciIGluQ29udGV4dDpzZWxm
XSBpbkNvbnRleHQ6c2VsZl07CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2
YWx1YXRlSlNTY3JpcHRNb2R1bGUobG9ja2VyLCBzY3JpcHQpOworICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gdG9SZWYoZXhl
Yywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVj
dGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOmV4Y2VwdGlvblZhbHVl
IGluQ29udGV4dDpzZWxmXSBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCByZXN1bHQpIGluQ29udGV4dDpzZWxm
XTsKK30KKwogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQogewogICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdhdGUgdGhlIGNv
bnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90ZSwgdGhpcyBk
ZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5IFVJV2ViVmll
dy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVMb2FkZXJEZWxl
Z2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3Qg
UnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNTY3JpcHQgdG8gZXZhbHVhdGUu
CisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0IHdhcyBjcmVhdGVkIHdpdGgg
a0pTU2NyaXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4gc3luY2hyb25vdXNseSBh
bmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90aGVyd2lzZSwgaWYgdGhl
IHNjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIGtKU1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUg
d2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkgYW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNv
bHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFueSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUg
bG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQg
aGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRlbGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVs
ZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRp
b24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlw
dDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
LmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1Njcmlw
dFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlv
biB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAg
ICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRoZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQg
cHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7
CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0sCisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307
CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lP
U19UQkEpKQogQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJ
IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6
aW5WaXJ0dWFsTWFjaGluZTp3aXRoU291cmNlOmFuZFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hl
OmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bSBKU0NfQVBJX0RFUFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOmluVmlydHVh
bE1hY2hpbmU6d2l0aFNvdXJjZTphbmRTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjog
aW5zdGVhZC4iLCBtYWNvc3goSlNDX01BQ19UQkEsIEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1Nf
VEJBLCBKU0NfSU9TX1RCQSkpOworCisvKiEKKyBUaGlzIFNQSSBpcyBkZXByZWNhdGVkIGFuZCBz
aG91bGQgbm90IGJlIHVzZWQuIFVzZSAic2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJy
b3I6IiBpbnN0ZWFkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RF
UFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVtb3J5TWFwcGVk
RnJvbUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6IGluc3Rl
YWQuIiwgbWFjb3N4KEpTQ19NQUNfVEJBLCBKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSwg
SlNDX0lPU19UQkEpKTsKKworLyohCisgVGhpcyBBUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxk
IG5vdCBiZSB1c2VkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hp
bmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRo
IGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIEpTQ19BUElfREVQ
UkVDQVRFRCgiRG8gbm90IHVzZSB0aGlzLiBVc2UgK3NjcmlwdE9mVHlwZTppblZpcnR1YWxNYWNo
aW5lOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0aFNvdXJjZVVSTDphbmRCeXRlY29kZUNh
Y2hlOmVycm9yOiBvciArc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6d2l0aFNvdXJjZTph
bmRTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjogaW5zdGVhZCIsIG1hY29zeChKU0Nf
TUFDX1RCQSwgSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEsIEpTQ19JT1NfVEJBKSk7CisK
Ky8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVj
aWZpZWQgdmlydHVhbCBtYWNoaW5lLgotIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRv
IHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0g
dHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gdm0gVGhlIEpTVmly
dHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBzb3Vy
Y2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5
IHRoZSBKUyB2bS4KKyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0
ZSB3aXRoIHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50
aWZpZXIuCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJl
IHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3
ZSB1c2UgdGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYg
dGhlIGNhY2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxk
IGRlbGV0ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KKyBAcGFy
YW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3Jl
YXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBk
aXNjdXNzaW9uIFRoZSBmaWxlIGF0IGNhY2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkg
bW9kaWZpZWQgZm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uCiAgKi8KLSsgKG51bGxhYmxlIGluc3Rh
bmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdm0gd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5kU291cmNlVVJMOihO
U1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hl
UGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CiAK
IC8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVj
aWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEgY29kZXNpZ25pbmcgYW5kIGJ5
dGVjb2RlIGNhY2hpbmcuCi0gQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBh
dGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2UuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5l
IHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KLSBAcGFyYW0gY29kZVNpZ25pbmdQYXRo
IEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZp
bGVQYXRoIG9uIGRpc2suCi0gQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBw
YXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHBh
cmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29k
ZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBp
ZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3
aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLiBPbiBjcmVhdGlv
biwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRoZSBjYWNoZWQgYnl0ZWNvZGUgb2ZmIGRpc2su
IElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhpcyBsb2NhdGlvbiBpcyBzdGFsZSwgeW91IHNo
b3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBjYWxsaW5nIHRoaXMgY29uc3RydWN0b3IuCisg
QHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJl
IGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCiAgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4K
LSBAZGlzY3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5k
IGNhY2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlm
ZWN5Y2xlIG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJl
IG5vdCB1c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0
dXJlLgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNo
b3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4g
VGhpcyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KIAog
IElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlG
aWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFu
ZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5T
VVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNv
ZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICog
X051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IENhY2hlIHRoZSBieXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCB0byBkaXNrIGF0IHRoZSBwYXRo
IHBhc3NlZCBpbiBkdXJpbmcgY3JlYXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24g
b2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNhY2hlZCBpZiB0aGUgcmVzdWx0IGlzIEZB
TFNFLgorICovCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICog
X051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IFJldHVybnMgdGhlIEpTU2NyaXB0VHlwZSBvZiB0aGlzIEpTU2NyaXB0LgorICovCistIChKU1Nj
cmlwdFR5cGUpdHlwZTsKIAogLyohCi0gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFs
ZW50IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25p
bmc6YW5kQnl0ZWNvZGVDYWNoZTouCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBz
b3VyY2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBl
KXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNv
ZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0
aDsKKy0gKE5TVVJMICopc291cmNlVVJMOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBA
CiAjaW1wb3J0ICJQYXJzZXJFcnJvci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8
c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNW
aXJ0dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBl
OworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0
cmluZyBtX3NvdXJjZTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJl
dGFpblB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2Nh
Y2hlZEJ5dGVjb2RlOwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291
cmNlQ29kZTsKQEAgLTUzLDYgKzU3LDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3Vy
Y2U6KE5TU3RyaQogICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVz
dWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3Jp
cHRUeXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTkwLDEyICs5NSwxMyBA
QCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlCiAKICsgKGluc3RhbmNl
dHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNp
Z25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShj
b2RlU2lnbmluZ1BhdGgpOworICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworCiAgICAgVVJM
IGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhV
UkwuaXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5n
IGl0IGludG8gZGlydHkgbWVtb3J5LgorCiAgICAgVmVjdG9yPExDaGFyPiBidWZmZXI7CiAgICAg
aWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xMDYsOCArMTEyLDcgQEAg
KyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVQogICAgIEpTU2NyaXB0ICpy
ZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3Vs
dC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OwotICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Ci0gICAgW3Jlc3VsdCByZWFk
Q2FjaGVdOworICAgIHJlc3VsdC0+bV90eXBlID0ga0pTU2NyaXB0VHlwZU1vZHVsZTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTYsNiArMTIxLDUzIEBAICsgKGluc3RhbmNldHlwZSlz
Y3JpcHRGcm9tVVRGOEZpbGU6KE5TVVIKICAgICByZXR1cm4gW0pTU2NyaXB0IHNjcmlwdEZyb21B
U0NJSUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29kZVNpZ25pbmc6Y29k
ZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0KIAorc3RhdGljIEpT
U2NyaXB0ICpjcmVhdGVFcnJvcihOU1N0cmluZyAqbWVzc2FnZSwgTlNFcnJvcioqIGVycm9yKQor
eworICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOkAiSlNTY3JpcHRFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZvOkB7IEAibWVzc2FnZSI6
IG1lc3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlw
dE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZtIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuZFNvdXJjZVVSTDooTlNV
UkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6
KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBK
U1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9
IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fc291
cmNlVVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7
CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGlu
c3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VS
TCAqKWZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5dGVjb2Rl
Q2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgorewor
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBh
YnNvbHV0ZVVSTF0pOworICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBw
YXRoICVAIGlzIG5vdCBhIGxvY2FsIGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxl
UGF0aFVSTCldLCBlcnJvcik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJp
bmcgc3lzdGVtUGF0aCA9IGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEgZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0
aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0
YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3Io
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBh
dCAlQCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBl
cnJvcik7CisKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihm
aWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVk
U291cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNv
dXJjZVVSTDsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1
bHQgcmVhZENhY2hlXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MK
IHsKICAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUu
b3duZWQoKSkKQEAgLTE1MiwyMiArMjA0LDI2IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9j
YWNoZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0K
IAotLSAodm9pZCl3cml0ZUNhY2hlCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5T
RXJyb3IgKiopZXJyb3IKIHsKLSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1f
Y2FjaGVQYXRoKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIGVycm9yU3RyaW5nIHsgfTsK
KyAgICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAoIWVycm9yU3RyaW5n
LmlzTnVsbCgpKSB7CisgICAgICAgIGNyZWF0ZUVycm9yKGVycm9yU3RyaW5nLCBlcnJvcik7Cisg
ICAgICAgIHJldHVybiBOTzsKKyAgICB9CiAKLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwot
ICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0
dWFsTWFjaGluZS52bSwgbV9qc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAg
IGlmIChlcnJvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVu
KFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYp
OwotICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2Nr
KGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQs
IG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAg
Y2xvc2UoZmQpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopc291cmNlVVJMCit7
CisgICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1NjcmlwdFR5cGUpdHlw
ZQoreworICAgIHJldHVybiBtX3R5cGU7CiB9CiAKIEBlbmQKQEAgLTE4OSwyNCArMjQ1LDc1IEBA
IC0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1f
Y2FjaGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6
KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChKU0M6OkpTU291cmNlQ29kZSop
anNTb3VyY2VDb2RlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VS
VChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNv
ZGUpCiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKworICAgIHJldHVybiBb
c2VsZiBmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlXTsKK30KKworLSAoQk9PTCl3cml0ZUNhY2hl
OihTdHJpbmcmKWVycm9yCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gWUVTOworCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBlcnJv
ciA9ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRo
aXMgSlNTY3JpcHQuIl9zOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQ
YXJzZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
a0pTU2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNv
ZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBrSlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Z2VuZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVd
LT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2Rl
ID0geyB9OworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBnZW5lcmF0ZSBi
eXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yOiAiLCBw
YXJzZXJFcnJvci5tZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAg
aW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9f
V1JPTkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtl
U3RyaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0
cmluZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBOTzsKICAgICB9CisgICAgaW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExP
Q0tfTkIpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8g
bG9jayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiJfczsKKyAgICBl
bHNlCisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRC
eXRlY29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7
Cit9CisKKy0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIG1fc291cmNl
VVJMID0gdXJsOworfQogCistIChKU0M6OkpTU291cmNlQ29kZSopZm9yY2VSZWNyZWF0ZUpTU291
cmNlQ29kZQorewogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24geyB9OwotICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciA9IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdp
bihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0
UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAg
ICBTdHJpbmcgdXJsID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmdd
IH07CisgICAgYXV0byB0eXBlID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6
OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNv
dXJjZVR5cGU6OlByb2dyYW07CisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291
cmNlT3JpZ2luKHVybCksIFVSTCh7IH0sIHVybCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAg
IEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6
OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pz
U291cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07
CiAgICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAogQGVuZAogCi0KICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9u
IDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVu
c2lnbmVkKWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlND
OjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSop
anNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxh
YmxlIGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpK
U1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdl
IHJlcXVpcmUgc291cmNlVVJMIHVwb24gY3JlYXRpb246IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTQ5MDkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3Jl
YXRlSlNTb3VyY2VDb2RlOworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOworLSAo
dm9pZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVz
VGVzdC5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBpbnQgdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCkKIAogICAgIGNvbnN0IGNoYXIqIG9s
ZEZ1bmN0aW9uT3ZlcnJpZGVzID0gT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlkZXMoKTsKICAgICAK
LSAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gInRlc3RhcGktZnVuY3Rpb24tb3Zl
cnJpZGVzLmpzIjsKKyAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gIi4vdGVzdGFw
aVNjcmlwdHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOwogICAgIEpTQzo6RnVuY3Rp
b25PdmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWRlcygpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKG51bGxwdHIsIG51bGxw
dHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNs
dWRlcy5tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RJbmNsdWRlcy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIC8v
IFNpbmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aHJvdWdoIHRoZSBy
ZXdyaXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3JpdHRlbiB2YWx1ZXMuLi4KICNk
ZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQo
Li4uKQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX01BQ19W
RVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMSArNDAsMTggQEAKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNp
bmNsdWRlICJKU1N0cmluZ1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJKU1dlYWtQcml2YXRlLmgi
CisjaWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRl
IDxsaW1pdHMuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+Cisj
aWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTY3LDcgKzc0LDcgQEAKICNl
bmRpZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEko
dm9pZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBp
bnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODcs
MTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUo
MCk7CiAjZW5kaWYKIAotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVjdGl2
ZUNBUEkoKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBjaGFyIHJlc29sdmVkUGF0aFtQQVRIX01B
WF07CisgICAgcmVhbHBhdGgoYXJndlswXSwgcmVzb2x2ZWRQYXRoKTsgCisgICAgY2hhciogbmV3
Q1dEID0gZGlybmFtZShyZXNvbHZlZFBhdGgpOworICAgIGlmIChjaGRpcihuZXdDV0QpKQorICAg
ICAgICBmcHJpbnRmKHN0ZG91dCwgIkNvdWxkIG5vdCBjaGRpciB0bzogJXNcbiIsIG5ld0NXRCk7
CiAjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6
IE5VTEw7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSShm
aWx0ZXIpOworI2VuZGlmCisKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmls
dGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTc5LDcgKzE5
OTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTT2JqZWN0TWFr
ZUNvbnN0cnVjdG9yKGNvbnRleHQsIG51bGxDbGFzcywgMCk7CiAgICAgSlNDbGFzc1JlbGVhc2Uo
bnVsbENsYXNzKTsKIAotICAgIGNvbnN0IGNoYXIqIHNjcmlwdFBhdGggPSAidGVzdGFwaS5qcyI7
CisgICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICIuL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGku
anMiOwogICAgIGNoYXIqIHNjcmlwdFVURjggPSBjcmVhdGVTdHJpbmdXaXRoQ29udGVudHNPZkZp
bGUoc2NyaXB0UGF0aCk7CiAgICAgaWYgKCFzY3JpcHRVVEY4KSB7CiAgICAgICAgIHByaW50Zigi
RkFJTDogVGVzdCBzY3JpcHQgY291bGQgbm90IGJlIGxvYWRlZC5cbiIpOwpAQCAtMjA4MiwxMyAr
MjA5NywxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICB9CiAg
ICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAgICAgfQotICAgIGZhaWxl
ZCA9IHRlc3RUeXBlZEFycmF5Q0FQSSgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0RXhl
Y3V0aW9uVGltZUxpbWl0KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RGdW5jdGlvbk92
ZXJyaWRlcygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhG
aW5hbGl6ZXIoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdFBpbmdQb25nU3RhY2tPdmVy
ZmxvdygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0SlNPTlBhcnNlKCkgfHwgZmFpbGVk
OwotICAgIGZhaWxlZCA9IHRlc3RKU09iamVjdEdldFByb3h5VGFyZ2V0KCkgfHwgZmFpbGVkOwor
ICAgIGZhaWxlZCB8PSB0ZXN0VHlwZWRBcnJheUNBUEkoKTsKKyAgICBmYWlsZWQgfD0gdGVzdEV4
ZWN1dGlvblRpbWVMaW1pdCgpOworICAgIGZhaWxlZCB8PSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMo
KTsKKyAgICBmYWlsZWQgfD0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCk7CisgICAg
ZmFpbGVkIHw9IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3coKTsKKyAgICBmYWlsZWQgfD0gdGVz
dEpTT05QYXJzZSgpOworICAgIGZhaWxlZCB8PSB0ZXN0SlNPYmplY3RHZXRQcm94eVRhcmdldCgp
OwogCiAgICAgLy8gQ2xlYXIgb3V0IGxvY2FsIHZhcmlhYmxlcyBwb2ludGluZyBhdCBKU09iamVj
dFJlZnMgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGNvbGxlY3RlZAogICAgIGZ1bmN0aW9u
ID0gTlVMTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbXBvcnQgIlJl
Z3Jlc3MxNDEyNzUuaCIKICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2lmIF9faGFzX2lu
Y2x1ZGUoPGxpYnByb2MuaD4pCisjZGVmaW5lIEhBU19MSUJQUk9DIDEKKyNpbXBvcnQgPGxpYnBy
b2MuaD4KKyNlbHNlCisjZGVmaW5lIEhBU19MSUJQUk9DIDAKKyNlbmRpZgogI2ltcG9ydCA8cHRo
cmVhZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5o
PgpAQCAtNTQsNyArNjAsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUo
aWQpCiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsKIAogZXh0
ZXJuIGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7
CitleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogZXh0ZXJu
ICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKQEAgLTE5ODAsMjIgKzE5ODYsMzAgQEAgc3RhdGljIHZvaWQgdGVzdEltcG9y
dE1vZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hl
KCkKK3N0YXRpYyBOU1VSTCAqdGVtcEZpbGUoTlNTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VS
TCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgIHJldHVybiBbdGVtcERpcmVjdG9yeSBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c3RyaW5nXTsKK30KKworc3RhdGljIHZvaWQgdGVzdE1v
ZHVsZUJ5dGVjb2RlQ2FjaGUoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBO
U1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNl
ID0gQCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5qcyc7IGV4cG9ydCBsZXQgbiA9IG51bGw7
IjsKKyAgICAgICAgTlNTdHJpbmcgKmJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gJy4u
L2Zvby5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyAq
YmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tICcuLi9kaXJlY3RvcnkvYmFyLmpzJzsg
Z2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAKLSAgICAg
ICAgTlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNc
IjsgZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBA
ImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7
Ci0gICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIu
Li9kaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBl
eHAgPSBmb287IjsKKyAgICAgICAgTlNVUkwgKmZvb1BhdGggPSB0ZW1wRmlsZShAImZvby5qcyIp
OworICAgICAgICBOU1VSTCAqYmFyUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzIik7CisgICAgICAg
IE5TVVJMICpiYXpQYXRoID0gdGVtcEZpbGUoQCJiYXouanMiKTsKIAotICAgICAgICBOU1VSTCog
Zm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZv
by5qcyJdOwotICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwotICAgICAgICBOU1VSTCogYmF6UGF0aCA9
IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhei5qcyJdOwor
ICAgICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28uanMuY2FjaGUiKTsK
KyAgICAgICAgTlNVUkwgKmJhckNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzLmNhY2hlIik7
CisgICAgICAgIE5TVVJMICpiYXpDYWNoZVBhdGggPSB0ZW1wRmlsZShAImJhei5qcy5jYWNoZSIp
OwogCi0gICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKLSAgICAgICAgTlNVUkwqIGJh
ckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
ImJhci5qcy5jYWNoZSJdOwotICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRoID0gW3RlbXBEaXJl
Y3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNhY2hlIl07CisgICAg
ICAgIE5TVVJMICpmb29GYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vLmpz
Il07CisgICAgICAgIE5TVVJMICpiYXJGYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
QCIvZGlyZWN0b3J5L2Jhci5qcyJdOworICAgICAgICBOU1VSTCAqYmF6RmFrZVBhdGggPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOkAiL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdOwogCiAgICAgICAg
IFtmb29Tb3VyY2Ugd3JpdGVUb1VSTDpmb29QYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNB
U0NJSVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIFtiYXJTb3VyY2Ugd3JpdGVU
b1VSTDpiYXJQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5n
IGVycm9yOm5pbF07CkBAIC0yMDAzLDEzICsyMDE3LDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRl
Y29kZUNhY2hlKCkKIAogICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQgKmNvbnRleHQs
IEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVjdCkg
ewogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVj
dG9yeS9iYXIuanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGlu
ZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVD
YWNoZTpmb29DYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBp
c0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNv
bHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmFy
UGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWdu
aW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3Rv
cnkvYmF6LmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6
QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGluVmlydHVhbE1hY2hpbmU6
Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2Fj
aGU6YmF6Q2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSlNTY3Jp
cHQgKnNjcmlwdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9P
YmplY3Q6W2Zvb0Zha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAgICAgICAgICAgICAgc2Ny
aXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVh
bE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxl
OmZvb1BhdGggd2l0aFNvdXJjZVVSTDpmb29GYWtlUGF0aCBhbmRCeXRlY29kZUNhY2hlOmZvb0Nh
Y2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNF
cXVhbFRvT2JqZWN0OltiYXJGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQorICAgICAgICAgICAg
ICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBp
blZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTpiYXJQYXRoIHdpdGhTb3VyY2VVUkw6YmFyRmFrZVBhdGggYW5kQnl0ZWNvZGVDYWNo
ZTpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb09iamVjdDpbYmF6RmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAg
ICAgICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVN
b2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6YmF6UGF0aCB3aXRoU291cmNlVVJMOmJhekZha2VQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisKKyAgICAgICAgICAgIGlmIChzY3Jp
cHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJv
cjpuaWxdKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIFty
ZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFs
dWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0
XV1dOwogICAgICAgICB9OwogCkBAIC0yMDIzLDEyICsyMDQzLDc1IEBAIHN0YXRpYyB2b2lkIHRl
c3RCeXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAgICBbZmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2Zp
bGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtm
aWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxd
OwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICByZW1vdmVk
QWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwor
ICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0
aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxl
TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAg
IHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGgg
ZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3VsdChAIlJl
bW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkg
eyByZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28oKSArIGJh
cigpOyI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5j
YWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBl
OmtKU1NjcmlwdFR5cGVQcm9ncmFtIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZSB3aXRoU291cmNlOmZvb1NvdXJjZSBhbmRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJteS1wYXRoIl0gYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgaWYgKCFbc2NyaXB0IGNh
Y2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChbcmVzdWx0IGlz
TnVtYmVyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0IG9mIGNhY2hlZCBwcm9ncmFt
IGlzIDQwKzQyIiwgW1tyZXN1bHQgdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0MCArIDQyKTsKKyAg
ICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisKKyAgICAgICAg
TlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUmVtb3Zl
ZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihKU1NjcmlwdFR5cGUgdHlw
ZSkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJj
ZSA9IEAidGhpcyBpcyBhIHN5bnRheCBlcnJvciI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBh
dGggPSB0ZW1wRmlsZShAImZvby5qcy5jYWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQg
PSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOnR5cGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIHdpdGhTb3VyY2U6Zm9vU291cmNlIGFuZFNvdXJjZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAIm15LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBOU0Vycm9y
ICplcnJvciA9IG5pbDsKKyAgICAgICAgaWYgKFtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJv
cjomZXJyb3JdKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXJyb3IpOworICAgICAgICBjaGVja1Jlc3VsdChAIkdvdCBlcnJvciB3aGVuIHRyeWluZyB0byBj
YWNoZSBieXRlY29kZSBmb3IgYSBzY3JpcHQgd2l0aCBhIHN5bnRheCBlcnJvci4iLCBbW2Vycm9y
IGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRlY29k
ZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yIl0pOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQy
OyI7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0
XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pT
U2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5l
IHdpdGhTb3VyY2U6c291cmNlIGFuZFNvdXJjZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAIm15
LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JpcHQpOworICAgICAgICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9
IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAq
LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0
cnVlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOwor
ICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9u
IHNob3VsZCBoYXZlIHRoZSBleGNlcHRpb24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9O
dW1iZXJdIGludFZhbHVlXSA9PSA0Mik7CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3Jp
cHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1Vu
ZGVmaW5lZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBl
eGNlcHRpb24gc2hvdWxkIGNhbGwgZXhjZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlv
bik7CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIxNjEsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpT
Q29udGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNp
Y0ZpbGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAg
IEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZp
bGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIxNzIsMTcyIEBAIHN0
YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVn
YXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5
cGUpbmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5
TWFwcGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAor
eworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUg
KilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVq
ZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2Ny
aXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVh
bE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxl
OmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJy
b3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3Vt
ZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8g
Y3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGlj
IHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90
IGNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDAp
OworI2VuZGlmCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQg
PSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAg
ICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1Zh
bHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMu
anMnKTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpT
VmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOwor
I2lmIEhBU19MSUJQUk9DCisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZv
KGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworI2VuZGlmCisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiSlNTY3JpcHQgc2hvdWxkIG5vdCBob2xkIGEgZmlsZSBkZXNjcmlwdG9yIiwg
Y291bnQgPT0gYWZ0ZXJDb3VudCk7CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0
LCBwcm9taXNlLCBudWxsKTsKKyAgICB9CisjaWYgSEFTX0xJQlBST0MKKyAgICBzaXplX3QgYWZ0
ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7Cisg
ICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBh
ZnRlciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09IGFmdGVyKTsKKyNlbmRpZgorfQor
CitAaW50ZXJmYWNlIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0
IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdh
dGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3Vs
dCA9IFtbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNv
bHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAq
KXJlamVjdAoreworICAgIFVOVVNFRF9QQVJBTShyZWplY3QpOworCisgICAgTlNVUkwgKmZpbGVQ
YXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBO
U1N0cmluZyAqcGF0aFN0cmluZyA9IFtmaWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107CisgICAgaWYg
KFtwYXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0aFN0cmluZyBj
b250YWluc1N0cmluZzpAImZvby5qcyJdKSB7CisgICAgICAgIGF1dG8gKnNjcmlwdCA9IFtKU1Nj
cmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNv
bnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCB3
aXRoU291cmNlVVJMOmZpbGVQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
W3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXIuanMiXSkgeworICAgICAgICBhdXRvICpz
Y3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhTb3VyY2U6QCIiIGFuZFNvdXJj
ZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL25vdC9wYXRoL3RvL2Jhci5qcyJdIGFuZEJ5
dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlw
dCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVSTCgpCit7CisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0QXVnbWVudGVk
TG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAqYmFzaWMgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMo
KV07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTpr
SlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhc2ljIHdpdGhTb3VyY2VVUkw6YmFzaWMgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQx
ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQxXTsKKyAgICAgICAgSlNWYWx1ZSAq
bnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAg
IGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBO
U1VSTCAqZm9vID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVsYXRpdmVUb1VS
TDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBb
SlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGlu
ZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6Zm9vIHdp
dGhTb3VyY2VVUkw6Zm9vIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNjcmlwdDIpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQyID0gW2Nv
bnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQyXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wg
d2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0
Y2giIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2Fz
UmVqZWN0ZWQgPSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KFtbcmVhc29uIHRvU3RyaW5nXSBjb250YWluc1N0cmluZzpAIlRoZSBzYW1lIEpTU2NyaXB0IHdh
cyBwcm92aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycyJdKTsKKyAgICAgICAgfV1d
OworCisgICAgICAgIGNoZWNrUmVzdWx0KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGgg
ZGlmZmVyZW50IGlkZW50aWZpZXJzIGlzIHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0K
K30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0
ZXN0KSkgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwg
I3Rlc3QpOyBcCisgICAgICAgIHRlc3Q7IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIs
ICN0ZXN0KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJ
KGNvbnN0IGNoYXIqIGZpbHRlcikKIHsKICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMg
QVBJIik7CiAKLSAgICBjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVh
ZExpbWl0VGVzdHMoKTsKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVz
dCkgLT4gYm9vbCB7CisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3Ry
Y2FzZXN0cih0ZXN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisg
ICAgUlVOKGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRM
aW1pdFRlc3RzKCkpOworCisgICAgUlVOKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0
VVJMKCkpOworICAgIFJVTih0ZXN0RmV0Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29D
eWNsZSgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRl
c3RJbXBvcnRNb2R1bGVUd2ljZSgpKTsKKyAgICBSVU4odGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUo
KSk7CisgICAgUlVOKHRlc3RQcm9ncmFtQnl0ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdEJ5
dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZVByb2dyYW0pKTsKKyAgICBS
VU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZU1vZHVsZSkp
OworICAgIFJVTih0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkpOwogCi0gICAgdGVzdExv
YWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAgICB0
ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOwot
ICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7Cisg
ICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0TG9h
ZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3Jp
cHRVUkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVOKHRl
c3RKU1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2FkQmFz
aWNGaWxlKCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJV
Tih0ZXN0TG9hZEJhc2ljRmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246
OlJlamVjdEVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29s
dmVMYXRlKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUp
OwotICAgIHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJl
c29sdmVkKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFyYWxsZWxQcm9t
aXNlUmVzb2x2ZVRlc3QoKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZXNvbHZlRWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZWplY3RFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246
OlJlc29sdmVMYXRlKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVqZWN0TGF0ZSkpOworICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpKTsKKyAg
ICBSVU4ocHJvbWlzZUNyZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVq
ZWN0ZWQoKSk7CisgICAgUlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkpOwogCiAgICAg
dGVzdE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCAiLi9iYXIuanMiOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC04ODQsNiArODg0LDcgQEAKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8q
IFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMw
NjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBS
dW50aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpzIGlu
IENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLzsgfTsKIAkJNTJGNkMzNUUxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEz
RTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNFNzhCMDAyNkE1NDUgLyog
VW5pZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzBBNjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0u
bW0gKi87IH07CkBAIC0xMTYwLDYgKzExNjEsNyBAQAogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Njk0M0ExRjhDMEFDODAwOTIz
MkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg3
MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzk4OTM3
NzkxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpT
Rml4ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDI5LDYgKzIwMzEsNyBAQAog
CQkJZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2Owog
CQkJZmlsZXMgPSAoCisJCQkJNTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBD
b3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBi
YXNpYy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEw
MDZGMjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQg
U2NyaXB0ICovLAogCQkJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGlu
IENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCkBAIC0zMzc3LDYgKzMzODAsNyBAQAogCQk1MkMwNjEx
RDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgx
OUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
eXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFF
NzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEE2MzQwMUZBM0UzMUMw
MDI2QTU0NSAvKiBTb3VyY2VzQ29jb2EudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNvdXJj
ZXNDb2NvYS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzcyLDYgKzM3NzYs
NyBAQAogCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3Ry
dWN0dXJlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyog
U3RydWN0dXJlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFz
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ZpeGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2
RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk5NSw2ICs2MDAwLDcgQEAKIAkJCQlD
MkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovLAogCQkJ
CTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4
MEE0NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLywKKwkJCQk3OTg3MkM0NzIyMUJCQUVEMDA4
QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0Qx
N0QgLyogSlNCYXNlUHJpdmF0ZS5oICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAv
KiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKQEAgLTYzNDAsNiArNjM0Niw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUzQzNENUU0MjFFQ0U2
Q0UwMDg3RkRGQyAvKiBiYXNpYy5qcyAqLywKKwkJCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMg
LyogZm9vLmpzICovLAogCQkJKTsKIAkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKIAkJCXBhdGgg
PSBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CkBAIC05NzU4LDYgKzk3NjUsNyBAQAogCQkJCTBG
RjQyNzQ4MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdD
IC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDE4
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0
ZWNvZGUoVk0mIHZtLCAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0gRXZh
bENvbnRleHRUeXBlOjpOb25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdn
ZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAg
IGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJu
IHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VD
b2RlVHlwZTo6UHJvZ3JhbVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9k
ZSk7CiB9CiAKQEAgLTExOCw2ICsxMjAsOCBAQCBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKFZNCiAgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxD
b250ZXh0VHlwZTo6Tm9uZTsKIAogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRl
YnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsK
KyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJl
dHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291
cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2Vy
TW9kZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362654</attachid>
            <date>2019-02-21 15:20:47 -0800</date>
            <delta_ts>2019-02-21 15:39:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>66132</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29u
ZmlnLmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjZGVmaW5lIEpTQ19BUElfQVZB
SUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pIEpTX0VYUE9SVAor
I2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8gVXNlIHplcm8gc2luY2UgaXQgd2ls
bCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24gbnVtYmVyLgogI2RlZmluZSBKU0Nf
TUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CisKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBKU0FQSUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CkBAIC01NSw2
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxv
YWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxv
YWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOwog
CisgICAgSlNWYWx1ZSBsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShjb25zdCBKU0xvY2tI
b2xkZXImLCBKU1NjcmlwdCAqKTsKKwogcHJpdmF0ZToKICAgICBKU0FQSUdsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDEwIEBACiAjaW1wb3J0ICJFcnJvci5oIgogI2ltcG9ydCAiRXhjZXB0
aW9uLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNJbnRlcm5h
bFByb21pc2UuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBv
cnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpTUHJvbWlzZURlZmVycmVkLmgi
CiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIK
ICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgpAQCAtNDMsNyArNDUsNiBAQAogI2ltcG9ydCAi
SmF2YVNjcmlwdENvcmUuaCIKICNpbXBvcnQgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW1wb3J0
ICJTb3VyY2VPcmlnaW4uaCIKLQogI2ltcG9ydCA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTc1LDEyICs3NiwyMCBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkCiAgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKTsKICAg
ICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CiAKLSAgICBVUkwgcmVmZXJy
ZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+dHJ5R2V0VmFsdWUoKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKLQotICAgIFVSTCB1
cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOwotICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIGlmIChK
U1N0cmluZyogcmVmZXJyZXJTdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odm0sIHJl
ZmVycmVyKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWZlcnJlclN0cmluZy0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIFVSTCByZWZlcnJlclVSTCh7IH0sIHZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVm
ZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAgICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJM
LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFVSTCB1cmwgPSBVUkwoeyB9LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAg
IH0KIAogICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlk
IFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UiX3MpOwogICAgIHJldHVybiB7IH07CkBAIC0x
NjIsOSArMTcxLDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptbwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAi
Tm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlz
ZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAg
IGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSog
ZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRo
YXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIApAQCAtMTc1LDcg
KzE4NCwzMiBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNv
ZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU2NyaXB0KiBqc1NjcmlwdCA9IHN0YXRpY19jYXN0
PEpTU2NyaXB0ICo+KHNjcmlwdCk7CisKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3VyY2UgPSBb
anNTY3JpcHQganNTb3VyY2VDb2RlXTsKKyAgICAgICAgaWYgKFVOTElLRUxZKFtqc1NjcmlwdCB0
eXBlXSAhPSBrSlNTY3JpcHRUeXBlTW9kdWxlKSkgeworICAgICAgICAgICAgYXJncy5hcHBlbmQo
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBw
cm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxl
LiIpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNl
RGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIp
OworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1
aXJlIHNvdXJjZVVSTCwgc28gd2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBm
b3Igc3VjaCB1c2UgY2FzZXMgdW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAg
ICAgICAvLyB3ZSBkbyB0aGF0LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3Vy
Y2VVUkw6CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ5MDkKKyAgICAgICAgaWYgKE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNl
VVJMXSkgeworICAgICAgICAgICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJz
b2x1dGVTdHJpbmddIH07CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIG9sZE1vZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkgeworICAgICAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJUaGUgc2Ft
ZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHBy
ZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5n
KCkpKSk7CisgICAgICAgICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJv
bWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4u
Li4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbanNTY3JpcHQgc2V0U291
cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KG1vZHVs
ZUtleS5zdHJpbmcoKSldXTsKKyAgICAgICAgICAgIHNvdXJjZSA9IFtqc1NjcmlwdCBmb3JjZVJl
Y3JlYXRlSlNTb3VyY2VDb2RlXTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3MuYXBwZW5kKHNv
dXJjZSk7CiAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZl
cnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOwog
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgfSk7CkBAIC0yMTAsNiAr
MjQ0LDIyIEBAIEpTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGUKICAgICBy
ZXR1cm4gbWV0YVByb3BlcnRpZXM7CiB9CiAKK0pTVmFsdWUgSlNBUElHbG9iYWxPYmplY3Q6Omxv
YWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2NyaXB0
ICpzY3JpcHQpCit7CisgICAgQVNTRVJUKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1
bGUpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsRXhlYygpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIElkZW50aWZpZXIga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcg
eyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSB9KTsKKyAgICBKU0ludGVybmFs
UHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1vZHVsZShleGVjLCBrZXksIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIHRoaXMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmVzdWx0LT5yZXNv
bHZlKGV4ZWMsIHByb21pc2UpOworICAgIHJldHVybiByZXN1bHQtPnByb21pc2UoKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNCYXNlLmgiCisjaW5jbHVkZSAiSlNCYXNl
SW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElD
YXN0LmgiCkBAIC00NywyNSArNDgsMTUgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNW
YWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNj
cmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQg
c3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitKU1ZhbHVlUmVmIEpT
RXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0xvY2tIb2xkZXImLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmICghY3R4KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgVU5VU0VEX1BBUkFNKGN0eCk7
CiAKICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0ID0gdG9KUyh0aGlzT2JqZWN0KTsKIAotICAg
IHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0K
ICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBp
cyBOVUxMCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKLSAgICBhdXRvIHNvdXJj
ZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsK
LSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291
cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyks
IFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5l
TnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7Ci0KICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2
YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHByb2ZpbGVkRXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIFByb2ZpbGluZ1JlYXNvbjo6QVBJLCBz
b3VyY2UsIGpzVGhpc09iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKQEAgLTgwLDcgKzcx
LDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgICAgICAv
LyBXZSBjb3VsZCBzdGFzaCBpdCBpbiB0aGUgaW5zcGVjdG9yIGluIGNhc2UgYW4gaW5zcGVjdG9y
IGlzIGV2ZXIgb3BlbmVkLgogICAgICAgICBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5k
aWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChyZXR1cm5WYWx1ZSkKQEAgLTkwLDYgKzgxLDI0IEBAIEpTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4
LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
IHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
dHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisKKyAgICBzdGFydGluZ0xpbmVOdW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVO
dW1iZXIpOworCisgICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBzb3VyY2VVUkwgPyBzb3VyY2VV
UkwtPnN0cmluZygpIDogU3RyaW5nKCk7CisgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291
cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBV
UkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXIoKSkpOworCisg
ICAgcmV0dXJuIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIsIGV4ZWMsIGN0eCwgdGhp
c09iamVjdCwgc291cmNlLCBleGNlcHRpb24pOworfQorCiBib29sIEpTQ2hlY2tTY3JpcHRTeW50
YXgoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1N0cmluZ1JlZiBzb3Vy
Y2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBpZiAoIWN0eCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
SW50ZXJuYWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9XZWJLaXRBdmFpbGFiaWxpdHkuaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0xvY2tI
b2xkZXI7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKK2V4dGVybiAiQyIgSlNWYWx1ZVJlZiBKU0V2
YWx1YXRlU2NyaXB0SW50ZXJuYWwoY29uc3QgSlNDOjpKU0xvY2tIb2xkZXImLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0
ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTExMiwx
MCArMTEzLDM4IEBAIC0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKikKIAog
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07Ci0KICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOwogfQogCistIChKU1ZhbHVl
ICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQKK3sKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIGlmIChzY3JpcHQu
dHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvblZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1
YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBtX2NvbnRleHQsIG51bGxwdHIsIFtzY3Jp
cHQganNTb3VyY2VDb2RlXS0+c291cmNlQ29kZSgpLCAmZXhjZXB0aW9uVmFsdWUpOworCisgICAg
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworICAgICAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworICAgIH0KKwor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQVBJR2xv
YmFsT2JqZWN0Kj4odm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNl
UmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgbW9kdWxlIGxvYWRpbmciIGluQ29udGV4dDpzZWxm
XSBpbkNvbnRleHQ6c2VsZl07CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2
YWx1YXRlSlNTY3JpcHRNb2R1bGUobG9ja2VyLCBzY3JpcHQpOworICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gdG9SZWYoZXhl
Yywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVj
dGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOmV4Y2VwdGlvblZhbHVl
IGluQ29udGV4dDpzZWxmXSBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCByZXN1bHQpIGluQ29udGV4dDpzZWxm
XTsKK30KKwogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQogewogICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdhdGUgdGhlIGNv
bnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90ZSwgdGhpcyBk
ZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5IFVJV2ViVmll
dy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVMb2FkZXJEZWxl
Z2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3Qg
UnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNTY3JpcHQgdG8gZXZhbHVhdGUu
CisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0IHdhcyBjcmVhdGVkIHdpdGgg
a0pTU2NyaXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4gc3luY2hyb25vdXNseSBh
bmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90aGVyd2lzZSwgaWYgdGhl
IHNjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIGtKU1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUg
d2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkgYW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNv
bHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFueSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUg
bG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQg
aGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRlbGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVs
ZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRp
b24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlw
dDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
LmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1Njcmlw
dFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlv
biB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAg
ICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRoZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQg
cHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7
CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0sCisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307
CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lP
U19UQkEpKQogQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJ
IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6
aW5WaXJ0dWFsTWFjaGluZTp3aXRoU291cmNlOmFuZFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hl
OmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bSBKU0NfQVBJX0RFUFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOmluVmlydHVh
bE1hY2hpbmU6d2l0aFNvdXJjZTphbmRTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjog
aW5zdGVhZC4iLCBtYWNvc3goSlNDX01BQ19UQkEsIEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1Nf
VEJBLCBKU0NfSU9TX1RCQSkpOworCisvKiEKKyBUaGlzIFNQSSBpcyBkZXByZWNhdGVkIGFuZCBz
aG91bGQgbm90IGJlIHVzZWQuIFVzZSAic2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJy
b3I6IiBpbnN0ZWFkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RF
UFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVtb3J5TWFwcGVk
RnJvbUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6IGluc3Rl
YWQuIiwgbWFjb3N4KEpTQ19NQUNfVEJBLCBKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSwg
SlNDX0lPU19UQkEpKTsKKworLyohCisgVGhpcyBBUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxk
IG5vdCBiZSB1c2VkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hp
bmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRo
IGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIEpTQ19BUElfREVQ
UkVDQVRFRCgiRG8gbm90IHVzZSB0aGlzLiBVc2UgK3NjcmlwdE9mVHlwZTppblZpcnR1YWxNYWNo
aW5lOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0aFNvdXJjZVVSTDphbmRCeXRlY29kZUNh
Y2hlOmVycm9yOiBvciArc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6d2l0aFNvdXJjZTph
bmRTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjogaW5zdGVhZCIsIG1hY29zeChKU0Nf
TUFDX1RCQSwgSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEsIEpTQ19JT1NfVEJBKSk7CisK
Ky8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVj
aWZpZWQgdmlydHVhbCBtYWNoaW5lLgotIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRv
IHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0g
dHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gdm0gVGhlIEpTVmly
dHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBzb3Vy
Y2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5
IHRoZSBKUyB2bS4KKyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0
ZSB3aXRoIHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50
aWZpZXIuCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJl
IHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3
ZSB1c2UgdGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYg
dGhlIGNhY2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxk
IGRlbGV0ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KKyBAcGFy
YW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY3Jl
YXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBk
aXNjdXNzaW9uIFRoZSBmaWxlIGF0IGNhY2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkg
bW9kaWZpZWQgZm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uCiAgKi8KLSsgKG51bGxhYmxlIGluc3Rh
bmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2Ny
aXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdm0gd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5kU291cmNlVVJMOihO
U1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hl
UGF0aCBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CiAK
IC8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVj
aWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEgY29kZXNpZ25pbmcgYW5kIGJ5
dGVjb2RlIGNhY2hpbmcuCi0gQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBh
dGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2YgSmF2YVNjcmlwdCBzb3VyY2UuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5l
IHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KLSBAcGFyYW0gY29kZVNpZ25pbmdQYXRo
IEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZp
bGVQYXRoIG9uIGRpc2suCi0gQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBw
YXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHBh
cmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29k
ZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0byBhc3Nv
Y2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBp
ZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3
aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLiBPbiBjcmVhdGlv
biwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRoZSBjYWNoZWQgYnl0ZWNvZGUgb2ZmIGRpc2su
IElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhpcyBsb2NhdGlvbiBpcyBzdGFsZSwgeW91IHNo
b3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBjYWxsaW5nIHRoaXMgY29uc3RydWN0b3IuCisg
QHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJl
IGNyZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCiAgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4K
LSBAZGlzY3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5k
IGNhY2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlm
ZWN5Y2xlIG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJl
IG5vdCB1c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0
dXJlLgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNo
b3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4g
VGhpcyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KIAog
IElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlG
aWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFu
ZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFj
aGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6KE5T
VVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNv
ZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6KG91dCBOU0Vycm9yICog
X051bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IENhY2hlIHRoZSBieXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCB0byBkaXNrIGF0IHRoZSBwYXRo
IHBhc3NlZCBpbiBkdXJpbmcgY3JlYXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24g
b2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNhY2hlZCBpZiB0aGUgcmVzdWx0IGlzIEZB
TFNFLgorICovCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICog
X051bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0
IFJldHVybnMgdGhlIEpTU2NyaXB0VHlwZSBvZiB0aGlzIEpTU2NyaXB0LgorICovCistIChKU1Nj
cmlwdFR5cGUpdHlwZTsKIAogLyohCi0gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFs
ZW50IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25p
bmc6YW5kQnl0ZWNvZGVDYWNoZTouCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBz
b3VyY2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBl
KXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNv
ZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0
aDsKKy0gKE5TVVJMICopc291cmNlVVJMOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBA
CiAjaW1wb3J0ICJQYXJzZXJFcnJvci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8
c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNW
aXJ0dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBl
OworICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0
cmluZyBtX3NvdXJjZTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJl
dGFpblB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2Nh
Y2hlZEJ5dGVjb2RlOwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291
cmNlQ29kZTsKQEAgLTUzLDYgKzU3LDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3Vy
Y2U6KE5TU3RyaQogICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVz
dWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3Jp
cHRUeXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTkwLDEyICs5NSwxMyBA
QCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlCiAKICsgKGluc3RhbmNl
dHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNp
Z25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShj
b2RlU2lnbmluZ1BhdGgpOworICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworCiAgICAgVVJM
IGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhV
UkwuaXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5n
IGl0IGludG8gZGlydHkgbWVtb3J5LgorCiAgICAgVmVjdG9yPExDaGFyPiBidWZmZXI7CiAgICAg
aWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1Q
YXRoKCksIGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xMDYsOCArMTEyLDcgQEAg
KyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVQogICAgIEpTU2NyaXB0ICpy
ZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3Vs
dC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OwotICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Ci0gICAgW3Jlc3VsdCByZWFk
Q2FjaGVdOworICAgIHJlc3VsdC0+bV90eXBlID0ga0pTU2NyaXB0VHlwZU1vZHVsZTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTYsNiArMTIxLDUzIEBAICsgKGluc3RhbmNldHlwZSlz
Y3JpcHRGcm9tVVRGOEZpbGU6KE5TVVIKICAgICByZXR1cm4gW0pTU2NyaXB0IHNjcmlwdEZyb21B
U0NJSUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29kZVNpZ25pbmc6Y29k
ZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0KIAorc3RhdGljIEpT
U2NyaXB0ICpjcmVhdGVFcnJvcihOU1N0cmluZyAqbWVzc2FnZSwgTlNFcnJvcioqIGVycm9yKQor
eworICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOkAiSlNTY3JpcHRFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZvOkB7IEAibWVzc2FnZSI6
IG1lc3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlw
dE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZtIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuZFNvdXJjZVVSTDooTlNV
UkwgKilzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggZXJyb3I6
KG91dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBK
U1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
KyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9
IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fc291
cmNlVVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7
CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGlu
c3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIGluVmlydHVhbE1hY2hp
bmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VS
TCAqKWZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5dGVjb2Rl
Q2FjaGU6KE5TVVJMICopY2FjaGVQYXRoIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgorewor
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBh
YnNvbHV0ZVVSTF0pOworICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBw
YXRoICVAIGlzIG5vdCBhIGxvY2FsIGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxl
UGF0aFVSTCldLCBlcnJvcik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJp
bmcgc3lzdGVtUGF0aCA9IGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5
c3RlbTo6TWFwcGVkRmlsZURhdGEgZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0
aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0
YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3Io
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBh
dCAlQCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBl
cnJvcik7CisKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICBy
ZXN1bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihm
aWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVk
U291cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNv
dXJjZVVSTDsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1
bHQgcmVhZENhY2hlXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MK
IHsKICAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUu
b3duZWQoKSkKQEAgLTE1MiwyMiArMjA0LDI2IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9j
YWNoZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0K
IAotLSAodm9pZCl3cml0ZUNhY2hlCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5T
RXJyb3IgKiopZXJyb3IKIHsKLSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1f
Y2FjaGVQYXRoKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIGVycm9yU3RyaW5nIHsgfTsK
KyAgICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAoIWVycm9yU3RyaW5n
LmlzTnVsbCgpKSB7CisgICAgICAgIGNyZWF0ZUVycm9yKGVycm9yU3RyaW5nLCBlcnJvcik7Cisg
ICAgICAgIHJldHVybiBOTzsKKyAgICB9CiAKLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwot
ICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0
dWFsTWFjaGluZS52bSwgbV9qc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAg
IGlmIChlcnJvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVu
KFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYp
OwotICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2Nr
KGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQs
IG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAg
Y2xvc2UoZmQpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopc291cmNlVVJMCit7
CisgICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1NjcmlwdFR5cGUpdHlw
ZQoreworICAgIHJldHVybiBtX3R5cGU7CiB9CiAKIEBlbmQKQEAgLTE4OSwyNCArMjQ1LDc1IEBA
IC0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1f
Y2FjaGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6
KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChKU0M6OkpTU291cmNlQ29kZSop
anNTb3VyY2VDb2RlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VS
VChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNv
ZGUpCiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKworICAgIHJldHVybiBb
c2VsZiBmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlXTsKK30KKworLSAoQk9PTCl3cml0ZUNhY2hl
OihTdHJpbmcmKWVycm9yCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gWUVTOworCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBlcnJv
ciA9ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRo
aXMgSlNTY3JpcHQuIl9zOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQ
YXJzZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
a0pTU2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNv
ZGVdLT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBrSlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Z2VuZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVd
LT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2Rl
ID0geyB9OworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBnZW5lcmF0ZSBi
eXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yOiAiLCBw
YXJzZXJFcnJvci5tZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAg
aW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9f
V1JPTkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtl
U3RyaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0
cmluZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBOTzsKICAgICB9CisgICAgaW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExP
Q0tfTkIpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8g
bG9jayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiJfczsKKyAgICBl
bHNlCisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRC
eXRlY29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7
Cit9CisKKy0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIG1fc291cmNl
VVJMID0gdXJsOworfQogCistIChKU0M6OkpTU291cmNlQ29kZSopZm9yY2VSZWNyZWF0ZUpTU291
cmNlQ29kZQorewogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24geyB9OwotICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciA9IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdp
bihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0
UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAg
ICBTdHJpbmcgdXJsID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmdd
IH07CisgICAgYXV0byB0eXBlID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6
OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNv
dXJjZVR5cGU6OlByb2dyYW07CisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291
cmNlT3JpZ2luKHVybCksIFVSTCh7IH0sIHVybCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAg
IEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6
OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pz
U291cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07
CiAgICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAogQGVuZAogCi0KICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9u
IDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVu
c2lnbmVkKWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlND
OjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSop
anNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxh
YmxlIGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpK
U1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdl
IHJlcXVpcmUgc291cmNlVVJMIHVwb24gY3JlYXRpb246IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTQ5MDkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3Jl
YXRlSlNTb3VyY2VDb2RlOworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOworLSAo
dm9pZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVz
VGVzdC5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBpbnQgdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCkKIAogICAgIGNvbnN0IGNoYXIqIG9s
ZEZ1bmN0aW9uT3ZlcnJpZGVzID0gT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlkZXMoKTsKICAgICAK
LSAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gInRlc3RhcGktZnVuY3Rpb24tb3Zl
cnJpZGVzLmpzIjsKKyAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gIi4vdGVzdGFw
aVNjcmlwdHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOwogICAgIEpTQzo6RnVuY3Rp
b25PdmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWRlcygpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKG51bGxwdHIsIG51bGxw
dHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNs
dWRlcy5tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RJbmNsdWRlcy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIC8v
IFNpbmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aHJvdWdoIHRoZSBy
ZXdyaXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3JpdHRlbiB2YWx1ZXMuLi4KICNk
ZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQo
Li4uKQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX01BQ19W
RVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMSArNDAsMTggQEAKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNp
bmNsdWRlICJKU1N0cmluZ1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJKU1dlYWtQcml2YXRlLmgi
CisjaWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRl
IDxsaW1pdHMuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+Cisj
aWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTY3LDcgKzc0LDcgQEAKICNl
bmRpZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEko
dm9pZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBp
bnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODcs
MTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUo
MCk7CiAjZW5kaWYKIAotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVjdGl2
ZUNBUEkoKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBjaGFyIHJlc29sdmVkUGF0aFtQQVRIX01B
WF07CisgICAgcmVhbHBhdGgoYXJndlswXSwgcmVzb2x2ZWRQYXRoKTsgCisgICAgY2hhciogbmV3
Q1dEID0gZGlybmFtZShyZXNvbHZlZFBhdGgpOworICAgIGlmIChjaGRpcihuZXdDV0QpKQorICAg
ICAgICBmcHJpbnRmKHN0ZG91dCwgIkNvdWxkIG5vdCBjaGRpciB0bzogJXNcbiIsIG5ld0NXRCk7
CiAjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6
IE5VTEw7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSShm
aWx0ZXIpOworI2VuZGlmCisKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmls
dGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTc5LDcgKzE5
OTQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTT2JqZWN0TWFr
ZUNvbnN0cnVjdG9yKGNvbnRleHQsIG51bGxDbGFzcywgMCk7CiAgICAgSlNDbGFzc1JlbGVhc2Uo
bnVsbENsYXNzKTsKIAotICAgIGNvbnN0IGNoYXIqIHNjcmlwdFBhdGggPSAidGVzdGFwaS5qcyI7
CisgICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICIuL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGku
anMiOwogICAgIGNoYXIqIHNjcmlwdFVURjggPSBjcmVhdGVTdHJpbmdXaXRoQ29udGVudHNPZkZp
bGUoc2NyaXB0UGF0aCk7CiAgICAgaWYgKCFzY3JpcHRVVEY4KSB7CiAgICAgICAgIHByaW50Zigi
RkFJTDogVGVzdCBzY3JpcHQgY291bGQgbm90IGJlIGxvYWRlZC5cbiIpOwpAQCAtMjA4MiwxMyAr
MjA5NywxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICB9CiAg
ICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAgICAgfQotICAgIGZhaWxl
ZCA9IHRlc3RUeXBlZEFycmF5Q0FQSSgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0RXhl
Y3V0aW9uVGltZUxpbWl0KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RGdW5jdGlvbk92
ZXJyaWRlcygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhG
aW5hbGl6ZXIoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdFBpbmdQb25nU3RhY2tPdmVy
ZmxvdygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0SlNPTlBhcnNlKCkgfHwgZmFpbGVk
OwotICAgIGZhaWxlZCA9IHRlc3RKU09iamVjdEdldFByb3h5VGFyZ2V0KCkgfHwgZmFpbGVkOwor
ICAgIGZhaWxlZCB8PSB0ZXN0VHlwZWRBcnJheUNBUEkoKTsKKyAgICBmYWlsZWQgfD0gdGVzdEV4
ZWN1dGlvblRpbWVMaW1pdCgpOworICAgIGZhaWxlZCB8PSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMo
KTsKKyAgICBmYWlsZWQgfD0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCk7CisgICAg
ZmFpbGVkIHw9IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3coKTsKKyAgICBmYWlsZWQgfD0gdGVz
dEpTT05QYXJzZSgpOworICAgIGZhaWxlZCB8PSB0ZXN0SlNPYmplY3RHZXRQcm94eVRhcmdldCgp
OwogCiAgICAgLy8gQ2xlYXIgb3V0IGxvY2FsIHZhcmlhYmxlcyBwb2ludGluZyBhdCBKU09iamVj
dFJlZnMgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGNvbGxlY3RlZAogICAgIGZ1bmN0aW9u
ID0gTlVMTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbXBvcnQgIlJl
Z3Jlc3MxNDEyNzUuaCIKICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2lmIF9faGFzX2lu
Y2x1ZGUoPGxpYnByb2MuaD4pCisjZGVmaW5lIEhBU19MSUJQUk9DIDEKKyNpbXBvcnQgPGxpYnBy
b2MuaD4KKyNlbHNlCisjZGVmaW5lIEhBU19MSUJQUk9DIDAKKyNlbmRpZgogI2ltcG9ydCA8cHRo
cmVhZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5o
PgpAQCAtNTQsNyArNjAsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUo
aWQpCiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsKIAogZXh0
ZXJuIGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7
CitleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogZXh0ZXJu
ICJDIiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKQEAgLTE5ODAsMjIgKzE5ODYsMzAgQEAgc3RhdGljIHZvaWQgdGVzdEltcG9y
dE1vZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hl
KCkKK3N0YXRpYyBOU1VSTCAqdGVtcEZpbGUoTlNTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VS
TCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgIHJldHVybiBbdGVtcERpcmVjdG9yeSBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c3RyaW5nXTsKK30KKworc3RhdGljIHZvaWQgdGVzdE1v
ZHVsZUJ5dGVjb2RlQ2FjaGUoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBO
U1VSTCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNl
ID0gQCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5qcyc7IGV4cG9ydCBsZXQgbiA9IG51bGw7
IjsKKyAgICAgICAgTlNTdHJpbmcgKmJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gJy4u
L2Zvby5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyAq
YmF6U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tICcuLi9kaXJlY3RvcnkvYmFyLmpzJzsg
Z2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAKLSAgICAg
ICAgTlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNc
IjsgZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBA
ImltcG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7
Ci0gICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIu
Li9kaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBl
eHAgPSBmb287IjsKKyAgICAgICAgTlNVUkwgKmZvb1BhdGggPSB0ZW1wRmlsZShAImZvby5qcyIp
OworICAgICAgICBOU1VSTCAqYmFyUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzIik7CisgICAgICAg
IE5TVVJMICpiYXpQYXRoID0gdGVtcEZpbGUoQCJiYXouanMiKTsKIAotICAgICAgICBOU1VSTCog
Zm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZv
by5qcyJdOwotICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwotICAgICAgICBOU1VSTCogYmF6UGF0aCA9
IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhei5qcyJdOwor
ICAgICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28uanMuY2FjaGUiKTsK
KyAgICAgICAgTlNVUkwgKmJhckNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzLmNhY2hlIik7
CisgICAgICAgIE5TVVJMICpiYXpDYWNoZVBhdGggPSB0ZW1wRmlsZShAImJhei5qcy5jYWNoZSIp
OwogCi0gICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKLSAgICAgICAgTlNVUkwqIGJh
ckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
ImJhci5qcy5jYWNoZSJdOwotICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRoID0gW3RlbXBEaXJl
Y3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNhY2hlIl07CisgICAg
ICAgIE5TVVJMICpmb29GYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vLmpz
Il07CisgICAgICAgIE5TVVJMICpiYXJGYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
QCIvZGlyZWN0b3J5L2Jhci5qcyJdOworICAgICAgICBOU1VSTCAqYmF6RmFrZVBhdGggPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOkAiL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdOwogCiAgICAgICAg
IFtmb29Tb3VyY2Ugd3JpdGVUb1VSTDpmb29QYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNB
U0NJSVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIFtiYXJTb3VyY2Ugd3JpdGVU
b1VSTDpiYXJQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5n
IGVycm9yOm5pbF07CkBAIC0yMDAzLDEzICsyMDE3LDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRl
Y29kZUNhY2hlKCkKIAogICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQgKmNvbnRleHQs
IEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVjdCkg
ewogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVj
dG9yeS9iYXIuanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGlu
ZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVD
YWNoZTpmb29DYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBp
c0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNv
bHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmFy
UGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWdu
aW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3Rv
cnkvYmF6LmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6
QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGluVmlydHVhbE1hY2hpbmU6
Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2Fj
aGU6YmF6Q2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSlNTY3Jp
cHQgKnNjcmlwdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9P
YmplY3Q6W2Zvb0Zha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAgICAgICAgICAgICAgc2Ny
aXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVh
bE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxl
OmZvb1BhdGggd2l0aFNvdXJjZVVSTDpmb29GYWtlUGF0aCBhbmRCeXRlY29kZUNhY2hlOmZvb0Nh
Y2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNF
cXVhbFRvT2JqZWN0OltiYXJGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQorICAgICAgICAgICAg
ICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBp
blZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTpiYXJQYXRoIHdpdGhTb3VyY2VVUkw6YmFyRmFrZVBhdGggYW5kQnl0ZWNvZGVDYWNo
ZTpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb09iamVjdDpbYmF6RmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAg
ICAgICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVN
b2R1bGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6YmF6UGF0aCB3aXRoU291cmNlVVJMOmJhekZha2VQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisKKyAgICAgICAgICAgIGlmIChzY3Jp
cHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJv
cjpuaWxdKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIFty
ZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFs
dWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0
XV1dOwogICAgICAgICB9OwogCkBAIC0yMDIzLDEyICsyMDQzLDc1IEBAIHN0YXRpYyB2b2lkIHRl
c3RCeXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZp
bGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAgICBbZmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2Zp
bGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtm
aWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBb
ZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxd
OwotICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICByZW1vdmVk
QWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwor
ICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0
aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJ
dGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxl
TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAg
IHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGgg
ZXJyb3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3VsdChAIlJl
bW92ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkg
eyByZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28oKSArIGJh
cigpOyI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5j
YWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10g
aW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBl
OmtKU1NjcmlwdFR5cGVQcm9ncmFtIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZSB3aXRoU291cmNlOmZvb1NvdXJjZSBhbmRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJteS1wYXRoIl0gYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgaWYgKCFbc2NyaXB0IGNh
Y2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKKyAgICAgICAgSlNWYWx1
ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChbcmVzdWx0IGlz
TnVtYmVyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0IG9mIGNhY2hlZCBwcm9ncmFt
IGlzIDQwKzQyIiwgW1tyZXN1bHQgdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0MCArIDQyKTsKKyAg
ICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisKKyAgICAgICAg
TlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUmVtb3Zl
ZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihKU1NjcmlwdFR5cGUgdHlw
ZSkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJj
ZSA9IEAidGhpcyBpcyBhIHN5bnRheCBlcnJvciI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBh
dGggPSB0ZW1wRmlsZShAImZvby5qcy5jYWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQg
PSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOnR5cGUgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIHdpdGhTb3VyY2U6Zm9vU291cmNlIGFuZFNvdXJjZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAIm15LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aCBlcnJv
cjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBOU0Vycm9y
ICplcnJvciA9IG5pbDsKKyAgICAgICAgaWYgKFtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJv
cjomZXJyb3JdKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXJyb3IpOworICAgICAgICBjaGVja1Jlc3VsdChAIkdvdCBlcnJvciB3aGVuIHRyeWluZyB0byBj
YWNoZSBieXRlY29kZSBmb3IgYSBzY3JpcHQgd2l0aCBhIHN5bnRheCBlcnJvci4iLCBbW2Vycm9y
IGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRlY29k
ZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yIl0pOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQy
OyI7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0
XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pT
U2NyaXB0VHlwZVByb2dyYW0gaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5l
IHdpdGhTb3VyY2U6c291cmNlIGFuZFNvdXJjZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAIm15
LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JpcHQpOworICAgICAgICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9
IGZhbHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAq
LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0
cnVlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOwor
ICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9u
IHNob3VsZCBoYXZlIHRoZSBleGNlcHRpb24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9O
dW1iZXJdIGludFZhbHVlXSA9PSA0Mik7CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3Jp
cHQgd2l0aCBleGNlcHRpb24gc2hvdWxkIHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1Vu
ZGVmaW5lZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBl
eGNlcHRpb24gc2hvdWxkIGNhbGwgZXhjZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlv
bik7CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIxNjEsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpT
Q29udGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNp
Y0ZpbGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAg
IEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZp
bGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIxNzIsMTcyIEBAIHN0
YXRpYyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVn
YXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5
cGUpbmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5
TWFwcGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAor
eworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUg
KilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVq
ZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2Ny
aXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVh
bE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxl
OmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwgZXJy
b3I6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3Vt
ZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8g
Y3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGlj
IHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90
IGNvdW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDAp
OworI2VuZGlmCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQg
PSBbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAg
ICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1Zh
bHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMu
anMnKTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpT
VmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOwor
I2lmIEhBU19MSUJQUk9DCisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZv
KGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBjaGVja1Jlc3Vs
dChAIkpTU2NyaXB0IHNob3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIsIGNvdW50ID09
IGFmdGVyQ291bnQpOworI2VuZGlmCisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0
LCBwcm9taXNlLCBudWxsKTsKKyAgICB9CisjaWYgSEFTX0xJQlBST0MKKyAgICBzaXplX3QgYWZ0
ZXIgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7Cisg
ICAgY2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBh
ZnRlciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09IGFmdGVyKTsKKyNlbmRpZgorfQor
CitAaW50ZXJmYWNlIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0
IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdh
dGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3Vs
dCA9IFtbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNv
bHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAq
KXJlamVjdAoreworICAgIFVOVVNFRF9QQVJBTShyZWplY3QpOworCisgICAgTlNVUkwgKmZpbGVQ
YXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBO
U1N0cmluZyAqcGF0aFN0cmluZyA9IFtmaWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107CisgICAgaWYg
KFtwYXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0aFN0cmluZyBj
b250YWluc1N0cmluZzpAImZvby5qcyJdKSB7CisgICAgICAgIGF1dG8gKnNjcmlwdCA9IFtKU1Nj
cmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBpblZpcnR1YWxNYWNoaW5lOmNv
bnRleHQudmlydHVhbE1hY2hpbmUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCB3
aXRoU291cmNlVVJMOmZpbGVQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
W3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXIuanMiXSkgeworICAgICAgICBhdXRvICpz
Y3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhTb3VyY2U6QCIiIGFuZFNvdXJj
ZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL25vdC9wYXRoL3RvL2Jhci5qcyJdIGFuZEJ5
dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlw
dCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVSTCgpCit7CisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0QXVnbWVudGVk
TG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAqYmFzaWMgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMo
KV07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTpr
SlNTY3JpcHRUeXBlTW9kdWxlIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhc2ljIHdpdGhTb3VyY2VVUkw6YmFzaWMgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWwgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQx
ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQxXTsKKyAgICAgICAgSlNWYWx1ZSAq
bnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAg
IGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBO
U1VSTCAqZm9vID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVsYXRpdmVUb1VS
TDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBb
SlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgaW5WaXJ0dWFsTWFjaGlu
ZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6Zm9vIHdp
dGhTb3VyY2VVUkw6Zm9vIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGVycm9yOm5pbF07CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNjcmlwdDIpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQyID0gW2Nv
bnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQyXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wg
d2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0
Y2giIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2Fz
UmVqZWN0ZWQgPSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KFtbcmVhc29uIHRvU3RyaW5nXSBjb250YWluc1N0cmluZzpAIlRoZSBzYW1lIEpTU2NyaXB0IHdh
cyBwcm92aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycyJdKTsKKyAgICAgICAgfV1d
OworCisgICAgICAgIGNoZWNrUmVzdWx0KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGgg
ZGlmZmVyZW50IGlkZW50aWZpZXJzIGlzIHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0K
K30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0
ZXN0KSkgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwg
I3Rlc3QpOyBcCisgICAgICAgIHRlc3Q7IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIs
ICN0ZXN0KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJ
KGNvbnN0IGNoYXIqIGZpbHRlcikKIHsKICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMg
QVBJIik7CiAKLSAgICBjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVh
ZExpbWl0VGVzdHMoKTsKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVz
dCkgLT4gYm9vbCB7CisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3Ry
Y2FzZXN0cih0ZXN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisg
ICAgUlVOKGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRM
aW1pdFRlc3RzKCkpOworCisgICAgUlVOKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0
VVJMKCkpOworICAgIFJVTih0ZXN0RmV0Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29D
eWNsZSgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRl
c3RJbXBvcnRNb2R1bGVUd2ljZSgpKTsKKyAgICBSVU4odGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUo
KSk7CisgICAgUlVOKHRlc3RQcm9ncmFtQnl0ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdEJ5
dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZVByb2dyYW0pKTsKKyAgICBS
VU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZU1vZHVsZSkp
OworICAgIFJVTih0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkpOwogCi0gICAgdGVzdExv
YWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAgICB0
ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOwot
ICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7Cisg
ICAgUlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0TG9h
ZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3Jp
cHRVUkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVOKHRl
c3RKU1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2FkQmFz
aWNGaWxlKCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJV
Tih0ZXN0TG9hZEJhc2ljRmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246
OlJlamVjdEVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29s
dmVMYXRlKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUp
OwotICAgIHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJl
c29sdmVkKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFyYWxsZWxQcm9t
aXNlUmVzb2x2ZVRlc3QoKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZXNvbHZlRWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZWplY3RFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246
OlJlc29sdmVMYXRlKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVqZWN0TGF0ZSkpOworICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpKTsKKyAg
ICBSVU4ocHJvbWlzZUNyZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVq
ZWN0ZWQoKSk7CisgICAgUlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkpOwogCiAgICAg
dGVzdE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCAiLi9iYXIuanMiOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC04ODQsNiArODg0LDcgQEAKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8q
IFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMw
NjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBS
dW50aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpzIGlu
IENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLzsgfTsKIAkJNTJGNkMzNUUxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEz
RTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNFNzhCMDAyNkE1NDUgLyog
VW5pZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzBBNjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0u
bW0gKi87IH07CkBAIC0xMTYwLDYgKzExNjEsNyBAQAogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Njk0M0ExRjhDMEFDODAwOTIz
MkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg3
MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzk4OTM3
NzkxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpT
Rml4ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDI5LDYgKzIwMzEsNyBAQAog
CQkJZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2Owog
CQkJZmlsZXMgPSAoCisJCQkJNTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBD
b3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBi
YXNpYy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEw
MDZGMjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQg
U2NyaXB0ICovLAogCQkJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGlu
IENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCkBAIC0zMzc3LDYgKzMzODAsNyBAQAogCQk1MkMwNjEx
RDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgx
OUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
eXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFF
NzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEE2MzQwMUZBM0UzMUMw
MDI2QTU0NSAvKiBTb3VyY2VzQ29jb2EudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNvdXJj
ZXNDb2NvYS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzcyLDYgKzM3NzYs
NyBAQAogCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3Ry
dWN0dXJlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyog
U3RydWN0dXJlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFz
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ZpeGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2
RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk5NSw2ICs2MDAwLDcgQEAKIAkJCQlD
MkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovLAogCQkJ
CTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4
MEE0NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLywKKwkJCQk3OTg3MkM0NzIyMUJCQUVEMDA4
QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0Qx
N0QgLyogSlNCYXNlUHJpdmF0ZS5oICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAv
KiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKQEAgLTYzNDAsNiArNjM0Niw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUzQzNENUU0MjFFQ0U2
Q0UwMDg3RkRGQyAvKiBiYXNpYy5qcyAqLywKKwkJCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMg
LyogZm9vLmpzICovLAogCQkJKTsKIAkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKIAkJCXBhdGgg
PSBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CkBAIC05NzU4LDYgKzk3NjUsNyBAQAogCQkJCTBG
RjQyNzQ4MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdD
IC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDE4
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0
ZWNvZGUoVk0mIHZtLCAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0gRXZh
bENvbnRleHRUeXBlOjpOb25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdn
ZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAg
IGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJu
IHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VD
b2RlVHlwZTo6UHJvZ3JhbVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9k
ZSk7CiB9CiAKQEAgLTExOCw2ICsxMjAsOCBAQCBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKFZNCiAgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxD
b250ZXh0VHlwZTo6Tm9uZTsKIAogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s+KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRl
YnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsK
KyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJl
dHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291
cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2Vy
TW9kZSk7CiB9CiAK
</data>
<flag name="review"
          id="379272"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362656</attachid>
            <date>2019-02-21 15:39:35 -0800</date>
            <delta_ts>2019-02-21 15:57:15 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>65972</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgSlNT
Y3JpcHQgU1BJIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBKU1NjcmlwdCBjYW4g
bm93IHJlcHJlc2VudCBib3RoIG1vZHVsZXMgYW5kIHByb2dyYW1zLiBUaGlzIGlzIGEgcHJvcGVy
dHkKKyAgICAgICAgb2YgdGhlIHNjcmlwdCBkZXRlcm1pbmVkIGR1cmluZyBjcmVhdGlvbi4KKyAg
ICAgICAgLSBKU1NjcmlwdCBub3cgdGFrZXMgYSBzb3VyY2VVUkwgZHVyaW5nIGNvbnN0cnVjdGlv
bi4gRm9yIG1vZHVsZXMsIHRoaXMgYWN0cworICAgICAgICBhcyB0aGUgbW9kdWxlIGlkZW50aWZp
ZXIuCisgICAgICAgIC0gSlNTY3JpcHQgbm93IGhhcyBTUEkgZm9yIHdyaXRpbmcgdGhlIGNhY2hl
IG91dCB0byBkaXNrLiBXZSBkb24ndCBkbyB0aGlzCisgICAgICAgIGF1dG9tYXRpY2FsbHkuCisg
ICAgICAgIC0gSlNTY3JpcHQgd2lsbCBsb2FkIHRoZSBieXRlY29kZSBjYWNoZSBvbiBjcmVhdGlv
biBpZiBpdCBleGlzdHMuCisgICAgICAgIC0gV2UgcmV0cm9maXQgdGhlc2UgbmV3IHJlcXVpcmVt
ZW50cyBvbiB0aGUgcHJpb3IgSlNTY3JpcHQgU1BJIHRoYXQKKyAgICAgICAgd2UncmUgZ29pbmcg
dG8gcmVtb3ZlIGFzIHNvb24gYXMgd2UgY2FuOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk0OTA5LgorICAgICAgICBQcmV2aW91cyBTUEkgYXNzdW1lcyBhbGwgSlNT
Y3JpcHRzIGFyZSBtb2R1bGVzLiBQcmV2aW91cyBTUEkgYWxzbyBhc3NpZ25zCisgICAgICAgIGEg
c291cmNlVVJMIHRvIHRoZSBKU1NjcmlwdCBiYXNlZCBvbiB3aGF0IHRoZSBtb2R1bGUgbG9hZGVy
IGRlY2lkZWQgdGhlCisgICAgICAgIGlkZW50aWZpZXIgc2hvdWxkIGJlLiBXZSdsbCByZW1vdmUg
dGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBhZGRzIFNQSSB0byBKU0NvbnRleHQgdG8gZXZhbHVhdGUgYSBKU1NjcmlwdC4g
Rm9yIG1vZHVsZXMsCisgICAgICAgIHRoaXMgaXMgbGlrZSByZXR1cm5pbmcgdGhlIHJlc3VsdCBv
ZiBkb2luZyBkeW5hbWljIGltcG9ydC4gRm9yIHByb2dyYW1zLAorICAgICAgICB0aGlzIGRvZXMg
bm9ybWFsIHByb2dyYW0gZXZhbHVhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyBpbiBnZW5lcmF0ZUJ5dGVjb2RlL2dlbmVyYXRlTW9kdWxlQnl0ZWNv
ZGUgd2hlcmUKKyAgICAgICAgd2Ugd291bGQgdHJ5IHRvIGNhY2hlIHRoZSBieXRlY29kZSBldmVu
IGlmIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jaworICAgICAgICByZXR1cm5l
ZCBudWxsLiBFLmcsIGlmIHRoZSBzY3JpcHQgaGFkIGEgc3ludGF4IGVycm9yLgorICAgICAgICAK
KyAgICAgICAgV2hlbiB3cml0aW5nIHRlc3RzLCBJIGFsc28gZGlzY292ZXJlZCB0aGF0IHNvbWVv
bmUgcHJldmlvdXNseSBicm9rZQorICAgICAgICB0ZXN0YXBpLiBUaGlzIHBhdGNoIGFsc28gZml4
ZXMgdGhvc2UgZmFpbHVyZXMuIFRoZXkgd2VyZSBicm9rZW4gd2hlbgorICAgICAgICB3ZSBzd2l0
Y2hlZCB0byB1c2luZyBhIHRlc3RhcGlTY3JpcHRzIGRpcmVjdG9yeSB0byBob2xkIG91ciB0ZXN0
IC5qcworICAgICAgICBzY3JpcHRzLiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUpOgorICAgICAgICAq
IEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKToKKyAg
ICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAqIEFQSS9KU0Jhc2VJbnRlcm5hbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6d2l0aFNvdXJjZVVSTDpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlSlNTY3JpcHQ6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoK
KyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToK
KyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5l
OndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoY3JlYXRlRXJy
b3IpOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoU291cmNlVVJMOmFuZFNvdXJjZTphbmRCeXRlY29kZUNhY2hlOmVycm9yOl0pOgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRPZlR5cGU6aW5WaXJ0dWFsTWFjaGluZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1b
SlNTY3JpcHQgc291cmNlVVJMXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHR5cGVdKToKKyAgICAg
ICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHNldFNvdXJjZVVSTDpdKToKKyAgICAgICAg
KC1bSlNTY3JpcHQgZm9yY2VSZWNyZWF0ZUpTU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCB3cml0ZUNhY2hlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTU2NyaXB0IGpzU291cmNl
Q29kZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOgorICAgICAgICAodGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZW1wRmlsZSk6CisgICAgICAgICh0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICh0
ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGVXaXRo
U3ludGF4RXJyb3IpOgorICAgICAgICAodGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbik6Cisg
ICAgICAgICh0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQSSk6CisgICAgICAgICgrW0pTQ29udGV4
dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlND
b250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAg
ICh0ZXN0TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICgrW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKC1bSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVI
YW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0SlNTY3JpcHRVUkwpOgor
ICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAodGVzdEJ5dGVjb2RlQ2FjaGUp
OiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanM6IEFk
ZGVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgorCiAy
MDE5LTAyLTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gUmVtb3ZlIFdhdGNocG9pbnRTZXQgY3JlYXRpb24gZm9yIFN5bWJvbFRhYmxlIGVudHJp
ZXMgaWYgVk06OmNhblVzZUpJVCgpIHJldHVybnMgZmFsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29u
ZmlnLmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjZGVmaW5lIEpTQ19BUElfQVZB
SUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pIEpTX0VYUE9SVAor
I2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4uKQogLy8gVXNlIHplcm8gc2luY2UgaXQgd2ls
bCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24gbnVtYmVyLgogI2RlZmluZSBKU0Nf
TUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAKK09CSkNfQ0xBU1MgSlNTY3JpcHQ7CisKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBKU0FQSUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CkBAIC01NSw2
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxv
YWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxv
YWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOwog
CisgICAgSlNWYWx1ZSBsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZShjb25zdCBKU0xvY2tI
b2xkZXImLCBKU1NjcmlwdCAqKTsKKwogcHJpdmF0ZToKICAgICBKU0FQSUdsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDEwIEBACiAjaW1wb3J0ICJFcnJvci5oIgogI2ltcG9ydCAiRXhjZXB0
aW9uLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNJbnRlcm5h
bFByb21pc2UuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBv
cnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpTUHJvbWlzZURlZmVycmVkLmgi
CiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIK
ICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgpAQCAtNDMsNyArNDUsNiBAQAogI2ltcG9ydCAi
SmF2YVNjcmlwdENvcmUuaCIKICNpbXBvcnQgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW1wb3J0
ICJTb3VyY2VPcmlnaW4uaCIKLQogI2ltcG9ydCA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTc1LDEyICs3NiwyMCBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkCiAgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKTsKICAg
ICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CiAKLSAgICBVUkwgcmVmZXJy
ZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+dHJ5R2V0VmFsdWUoKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKLQotICAgIFVSTCB1
cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOwotICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIGlmIChK
U1N0cmluZyogcmVmZXJyZXJTdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odm0sIHJl
ZmVycmVyKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWZlcnJlclN0cmluZy0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIFVSTCByZWZlcnJlclVSTCh7IH0sIHZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVm
ZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAgICAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJM
LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFVSTCB1cmwgPSBVUkwoeyB9LCBuYW1lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworICAg
IH0KIAogICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlk
IFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UiX3MpOwogICAgIHJldHVybiB7IH07CkBAIC0x
NjIsOSArMTcxLDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptbwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAi
Tm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlz
ZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAg
IGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSog
ZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRo
YXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIApAQCAtMTc1LDcg
KzE4NCwzMiBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vCiAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBhcmdzLmFwcGVuZChbc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNv
ZGU6bW9kdWxlS2V5XSk7CisgICAgICAgIEpTU2NyaXB0KiBqc1NjcmlwdCA9IHN0YXRpY19jYXN0
PEpTU2NyaXB0ICo+KHNjcmlwdCk7CisKKyAgICAgICAgSlNTb3VyY2VDb2RlKiBzb3VyY2UgPSBb
anNTY3JpcHQganNTb3VyY2VDb2RlXTsKKyAgICAgICAgaWYgKFVOTElLRUxZKFtqc1NjcmlwdCB0
eXBlXSAhPSBrSlNTY3JpcHRUeXBlTW9kdWxlKSkgeworICAgICAgICAgICAgYXJncy5hcHBlbmQo
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBw
cm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxl
LiIpKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNl
RGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIp
OworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1
aXJlIHNvdXJjZVVSTCwgc28gd2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBm
b3Igc3VjaCB1c2UgY2FzZXMgdW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAg
ICAgICAvLyB3ZSBkbyB0aGF0LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3Vy
Y2VVUkw6CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ5MDkKKyAgICAgICAgaWYgKE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNl
VVJMXSkgeworICAgICAgICAgICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJz
b2x1dGVTdHJpbmddIH07CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIG9sZE1vZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkgeworICAgICAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJUaGUgc2Ft
ZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBkaWZmZXJlbnQgaWRlbnRpZmllcnMsIHBy
ZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQgbm93OiAiLCBtb2R1bGVLZXkuc3RyaW5n
KCkpKSk7CisgICAgICAgICAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJv
bWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4u
Li4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbanNTY3JpcHQgc2V0U291
cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KG1vZHVs
ZUtleS5zdHJpbmcoKSldXTsKKyAgICAgICAgICAgIHNvdXJjZSA9IFtqc1NjcmlwdCBmb3JjZVJl
Y3JlYXRlSlNTb3VyY2VDb2RlXTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3MuYXBwZW5kKHNv
dXJjZSk7CiAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZl
cnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOwog
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgfSk7CkBAIC0yMTAsNiAr
MjQ0LDIyIEBAIEpTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGUKICAgICBy
ZXR1cm4gbWV0YVByb3BlcnRpZXM7CiB9CiAKK0pTVmFsdWUgSlNBUElHbG9iYWxPYmplY3Q6Omxv
YWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2NyaXB0
ICpzY3JpcHQpCit7CisgICAgQVNTRVJUKHNjcmlwdC50eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1
bGUpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsRXhlYygpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIElkZW50aWZpZXIga2V5ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcg
eyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29sdXRlU3RyaW5nXSB9KTsKKyAgICBKU0ludGVybmFs
UHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1vZHVsZShleGVjLCBrZXksIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIHRoaXMp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgcmVzdWx0LT5yZXNv
bHZlKGV4ZWMsIHByb21pc2UpOworICAgIHJldHVybiByZXN1bHQtPnByb21pc2UoKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNCYXNlLmgiCisjaW5jbHVkZSAiSlNCYXNl
SW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElD
YXN0LmgiCkBAIC00NywyNSArNDgsMTUgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNW
YWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNj
cmlwdCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQg
c3RhcnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitKU1ZhbHVlUmVmIEpT
RXZhbHVhdGVTY3JpcHRJbnRlcm5hbChjb25zdCBKU0xvY2tIb2xkZXImLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmICghY3R4KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgVU5VU0VEX1BBUkFNKGN0eCk7
CiAKICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0ID0gdG9KUyh0aGlzT2JqZWN0KTsKIAotICAg
IHN0YXJ0aW5nTGluZU51bWJlciA9IHN0ZDo6bWF4KDEsIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0K
ICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBp
cyBOVUxMCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKLSAgICBhdXRvIHNvdXJj
ZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsK
LSAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5zdHJpbmcoKSwgU291
cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNvdXJjZVVSTFN0cmluZyks
IFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5l
TnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7Ci0KICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2
YWx1YXRpb25FeGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHByb2ZpbGVkRXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIFByb2ZpbGluZ1JlYXNvbjo6QVBJLCBz
b3VyY2UsIGpzVGhpc09iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKQEAgLTgwLDcgKzcx
LDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgICAgICAv
LyBXZSBjb3VsZCBzdGFzaCBpdCBpbiB0aGUgaW5zcGVjdG9yIGluIGNhc2UgYW4gaW5zcGVjdG9y
IGlzIGV2ZXIgb3BlbmVkLgogICAgICAgICBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5k
aWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChyZXR1cm5WYWx1ZSkKQEAgLTkwLDYgKzgxLDI0IEBAIEpTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4
LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
IHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGlmICghY3R4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
dHgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisKKyAgICBzdGFydGluZ0xpbmVOdW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVO
dW1iZXIpOworCisgICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBzb3VyY2VVUkwgPyBzb3VyY2VV
UkwtPnN0cmluZygpIDogU3RyaW5nKCk7CisgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291
cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBV
UkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXIoKSkpOworCisg
ICAgcmV0dXJuIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIsIGV4ZWMsIGN0eCwgdGhp
c09iamVjdCwgc291cmNlLCBleGNlcHRpb24pOworfQorCiBib29sIEpTQ2hlY2tTY3JpcHRTeW50
YXgoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1N0cmluZ1JlZiBzb3Vy
Y2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBpZiAoIWN0eCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
SW50ZXJuYWwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9XZWJLaXRBdmFpbGFiaWxpdHkuaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0xvY2tI
b2xkZXI7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKK2V4dGVybiAiQyIgSlNWYWx1ZVJlZiBKU0V2
YWx1YXRlU2NyaXB0SW50ZXJuYWwoY29uc3QgSlNDOjpKU0xvY2tIb2xkZXImLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0
ICJKU0Jhc2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlND
b250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTExMiwx
MCArMTEzLDM4IEBAIC0gKEpTVmFsdWUgKilldmFsdWF0ZVNjcmlwdDooTlNTdHJpbmcgKikKIAog
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25WYWx1ZV07Ci0KICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOwogfQogCistIChKU1ZhbHVl
ICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQKK3sKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIGlmIChzY3JpcHQu
dHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvblZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1
YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBtX2NvbnRleHQsIG51bGxwdHIsIFtzY3Jp
cHQganNTb3VyY2VDb2RlXS0+c291cmNlQ29kZSgpLCAmZXhjZXB0aW9uVmFsdWUpOworCisgICAg
ICAgIGlmIChleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uVmFsdWVdOworICAgICAgICByZXR1cm4gW0pTVmFs
dWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpyZXN1bHQgaW5Db250ZXh0OnNlbGZdOworICAgIH0KKwor
ICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQVBJR2xv
YmFsT2JqZWN0Kj4odm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNl
UmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgbW9kdWxlIGxvYWRpbmciIGluQ29udGV4dDpzZWxm
XSBpbkNvbnRleHQ6c2VsZl07CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2
YWx1YXRlSlNTY3JpcHRNb2R1bGUobG9ja2VyLCBzY3JpcHQpOworICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkgeworICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvblZhbHVlID0gdG9SZWYoZXhl
Yywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVj
dGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOmV4Y2VwdGlvblZhbHVl
IGluQ29udGV4dDpzZWxmXSBpbkNvbnRleHQ6c2VsZl07CisgICAgfQorICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKHZtLCByZXN1bHQpIGluQ29udGV4dDpzZWxm
XTsKK30KKwogLSAodm9pZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQogewogICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgJKHJldmlzaW9uIDI0MTg2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCwxNiBAQAogLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdhdGUgdGhlIGNv
bnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90ZSwgdGhpcyBk
ZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5IFVJV2ViVmll
dy4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVMb2FkZXJEZWxl
Z2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CiAKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3Qg
UnVuIGEgSlNTY3JpcHQuCisgQHBhcmFtIHNjcmlwdCB0aGUgSlNTY3JpcHQgdG8gZXZhbHVhdGUu
CisgQGRpc2N1c3Npb24gSWYgdGhlIHByb3ZpZGVkIEpTU2NyaXB0IHdhcyBjcmVhdGVkIHdpdGgg
a0pTU2NyaXB0VHlwZVByb2dyYW0sIHRoZSBzY3JpcHQgd2lsbCBydW4gc3luY2hyb25vdXNseSBh
bmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbi4KKworIE90aGVyd2lzZSwgaWYgdGhl
IHNjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIGtKU1NjcmlwdFR5cGVNb2R1bGUsIHRoZSBtb2R1bGUg
d2lsbCBiZSBydW4gYXN5bmNocm9ub3VzbHkgYW5kIHdpbGwgcmV0dXJuIGEgcHJvbWlzZSByZXNv
bHZlZCB3aGVuIHRoZSBtb2R1bGUgYW5kIGFueSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUg
bG9hZGVkLiBUaGUgbW9kdWxlIGxvYWRlciB3aWxsIHRyZWF0IHRoZSBzY3JpcHQgYXMgaWYgaXQg
aGFkIGJlZW4gcmV0dXJuZWQgZnJvbSBhIGRlbGVnYXRlIGNhbGwgdG8gbW9kdWxlTG9hZGVyRGVs
ZWdhdGUuIFRoaXMgbWlycm9ycyB0aGUgSmF2YVNjcmlwdCBkeW5hbWljIGltcG9ydCBvcGVyYXRp
b24uCisgKi8KKy0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNjcmlw
dDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
LmgJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzcgKzMxLDg0IEBAIE5TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOwogCisvKiEKKyBAZW51bSBKU1Njcmlw
dFR5cGUKKyBAYWJzdHJhY3QgICAgIEEgY29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGV4ZWN1dGlv
biB0eXBlIG9mIGEgSlNTY3JpcHQuCisgQGNvbnN0YW50ICAgICBrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSAgVGhlIHR5cGUgb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBwcm9ncmFtLgorIEBjb25zdGFudCAg
ICAga0pTU2NyaXB0VHlwZU1vZHVsZSAgIFRoZSB0eXBlIG9mIGEgbW9kdWxlIEphdmFTY3JpcHQg
cHJvZ3JhbS4KKyAqLwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgSlNTY3JpcHRUeXBlKSB7
CisgICAga0pTU2NyaXB0VHlwZVByb2dyYW0sCisgICAga0pTU2NyaXB0VHlwZU1vZHVsZSwKK307
CisKKwogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lP
U19UQkEpKQogQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CiAKIC8qIQorIFRoaXMgU1BJ
IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gVXNlICJzY3JpcHRPZlR5cGU6
d2l0aFNvdXJjZTphbmRTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5l
OmVycm9yOiIgaW5zdGVhZC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bSBKU0NfQVBJX0RFUFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOndpdGhTb3Vy
Y2U6YW5kU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjog
aW5zdGVhZC4iLCBtYWNvc3goSlNDX01BQ19UQkEsIEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1Nf
VEJBLCBKU0NfSU9TX1RCQSkpOworCisvKiEKKyBUaGlzIFNQSSBpcyBkZXByZWNhdGVkIGFuZCBz
aG91bGQgbm90IGJlIHVzZWQuIFVzZSAic2NyaXB0T2ZUeXBlOm1lbW9yeU1hcHBlZEZyb21BU0NJ
SUZpbGU6d2l0aFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmluVmlydHVhbE1hY2hpbmU6ZXJy
b3I6IiBpbnN0ZWFkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RF
UFJFQ0FURUQoIlVzZSArc2NyaXB0T2ZUeXBlOm1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6d2l0
aFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmluVmlydHVhbE1hY2hpbmU6ZXJyb3I6IGluc3Rl
YWQuIiwgbWFjb3N4KEpTQ19NQUNfVEJBLCBKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSwg
SlNDX0lPU19UQkEpKTsKKworLyohCisgVGhpcyBBUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxk
IG5vdCBiZSB1c2VkLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hp
bmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRo
IGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIEpTQ19BUElfREVQ
UkVDQVRFRCgiRG8gbm90IHVzZSB0aGlzLiBVc2UgK3NjcmlwdE9mVHlwZTptZW1vcnlNYXBwZWRG
cm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNo
aW5lOmVycm9yOiBvciArc2NyaXB0T2ZUeXBlOndpdGhTb3VyY2U6YW5kU291cmNlVVJMOmFuZEJ5
dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjogaW5zdGVhZCIsIG1hY29zeChKU0Nf
TUFDX1RCQSwgSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEsIEpTQ19JT1NfVEJBKSk7CisK
Ky8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVj
aWZpZWQgdmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIEphdmFTY3Jp
cHQgc291cmNlLgogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVuIHRo
ZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gc291cmNlVVJMIFRo
ZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc2NyaXB0LiBGb3IgbW9kdWxlcywg
dGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50aWZpZXIuCisgQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBj
b250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBl
eGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3ZSB1c2UgdGhpcyBwYXRoIHRvIGxvYWQgdGhlIGNhY2hl
ZCBieXRlY29kZSBvZmYgZGlzay4gSWYgdGhlIGNhY2hlZCBieXRlY29kZSBhdCB0aGlzIGxvY2F0
aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxkIGRlbGV0ZSB0aGF0IGZpbGUgYmVmb3JlIGNhbGxpbmcg
dGhpcyBjb25zdHJ1Y3Rvci4KICBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNj
cmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBlcnJvciBBIGRlc2NyaXB0aW9uIG9m
IHdoeSB0aGUgc2NyaXB0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGlmIHRoZSByZXN1bHQgaXMgbmls
LgogIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1c3Npb24gVGhlIGZpbGUgYXQgY2Fj
aGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNs
ZSBvZiB2bS4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6
KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bTsKKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0
eXBlIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGFuZFNvdXJjZVVSTDooTlNVUkwgKilz
b3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIGVycm9yOihvdXQgTlNFcnJvciAq
IF9OdWxsYWJsZSAqIF9OdWxsYWJsZSllcnJvcjsKIAogLyohCiAgQG1ldGhvZAogIEBhYnN0cmFj
dCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0
aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0g
dHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBAcGFyYW0gZmlsZVBhdGggQSBV
UkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4K
KyBAcGFyYW0gc291cmNlVVJMIFRoZSBzb3VyY2UgVVJMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMg
c2NyaXB0LiBGb3IgbW9kdWxlcywgdGhpcyBpcyB0aGUgbW9kdWxlIGlkZW50aWZpZXIuCisgQHBh
cmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91
bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uIE9uIGNyZWF0aW9uLCB3ZSB1c2UgdGhpcyBw
YXRoIHRvIGxvYWQgdGhlIGNhY2hlZCBieXRlY29kZSBvZmYgZGlzay4gSWYgdGhlIGNhY2hlZCBi
eXRlY29kZSBhdCB0aGlzIGxvY2F0aW9uIGlzIHN0YWxlLCB5b3Ugc2hvdWxkIGRlbGV0ZSB0aGF0
IGZpbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyBjb25zdHJ1Y3Rvci4KICBAcGFyYW0gdm0gVGhlIEpT
VmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgotIEBwYXJhbSBj
b2RlU2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25p
bmcgZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KLSBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNv
bnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4
ZWN1dGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBj
b3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRoZSBu
ZXcgc2NyaXB0LgotIEBkaXNjdXNzaW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25p
bmdQYXRoLCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAg
Zm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNh
Y2hlUGF0aCBhcmUgbm90IHVzZWQgY3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0
aGUgbmVhciBmdXR1cmUuCisgQGRpc2N1c3Npb24gVGhlIGZpbGVzIGF0IGZpbGVQYXRoIGFuZCBj
YWNoZVBhdGggc2hvdWxkIG5vdCBiZSBleHRlcm5hbGx5IG1vZGlmaWVkIGZvciB0aGUgbGlmZWN5
Y2xlIG9mIHZtLiBUaGlzIG1ldGhvZCB3aWxsIGZpbGUgYmFjayB0aGUgbWVtb3J5IGZvciB0aGUg
c291cmNlLgogCiAgSWYgdGhlIGZpbGUgYXQgZmlsZVBhdGggaXMgbm90IGFzY2lpIHRoaXMgbWV0
aG9kIHdpbGwgcmV0dXJuIG5pbC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlw
dEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2ln
bmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7Cisr
IChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSBt
ZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6
KE5TVVJMICopc291cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2Fj
aGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSBlcnJvcjoob3V0
IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CisKKy8qIQorIEBtZXRob2QK
KyBAYWJzdHJhY3QgQ2FjaGUgdGhlIGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IHRvIGRpc2sg
YXQgdGhlIHBhdGggcGFzc2VkIGluIGR1cmluZyBjcmVhdGlvbi4KKyBAcGFyYW0gZXJyb3IgQSBk
ZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlwdCBjb3VsZCBub3QgYmUgY2FjaGVkIGlmIHRoZSBy
ZXN1bHQgaXMgRkFMU0UuCisgKi8KKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjoob3V0
IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBfTnVsbGFibGUpZXJyb3I7CiAKKy8qIQorIEBtZXRob2QK
KyBAYWJzdHJhY3QgUmV0dXJucyB0aGUgSlNTY3JpcHRUeXBlIG9mIHRoaXMgSlNTY3JpcHQuCisg
Ki8KKy0gKEpTU2NyaXB0VHlwZSl0eXBlOwogCiAvKiEKLSBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5k
IGlzIGVxdWl2YWxlbnQgdG8gc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5lOndp
dGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hlOi4KKyBAbWV0aG9kCisgQGFic3RyYWN0IFJl
dHVybnMgdGhlIHNvdXJjZVVSTCBvZiB0aGlzIEpTU2NyaXB0LgogICovCi0rIChudWxsYWJsZSBp
bnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVh
bE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxl
IE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJM
ICopY2FjaGVQYXRoOworLSAoTlNVUkwgKilzb3VyY2VVUkw7CiAKIEBlbmQKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MiArMzYsMTYgQEAKICNpbXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIK
ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewogICAg
IF9fd2VhayBKU1ZpcnR1YWxNYWNoaW5lKiBtX3ZpcnR1YWxNYWNoaW5lOworICAgIEpTU2NyaXB0
VHlwZSBtX3R5cGU7CisgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEgbV9tYXBwZWRTb3Vy
Y2U7CiAgICAgU3RyaW5nIG1fc291cmNlOworICAgIFJldGFpblB0cjxOU1VSTD4gbV9zb3VyY2VV
Ukw7CiAgICAgUmV0YWluUHRyPE5TVVJMPiBtX2NhY2hlUGF0aDsKICAgICBKU0M6OkNhY2hlZEJ5
dGVjb2RlIG1fY2FjaGVkQnl0ZWNvZGU7CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNv
ZGU+IG1fanNTb3VyY2VDb2RlOwpAQCAtNTMsNiArNTcsNyBAQCArIChpbnN0YW5jZXR5cGUpc2Ny
aXB0V2l0aFNvdXJjZTooTlNTdHJpCiAgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJj
ZTsKICAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlw
ZSA9IGtKU1NjcmlwdFR5cGVNb2R1bGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAs
MTIgKzk1LDEzIEBAIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUKIAog
KyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNV
UkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgK
IHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCiAgICAgVU5V
U0VEX1BBUkFNKGNvZGVTaWduaW5nUGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7
CisKICAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CiAgICAgaWYg
KCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQgaW50byBkaXJ0eSBtZW1vcnkuCisKICAgICBWZWN0b3I8TENoYXI+IGJ1
ZmZlcjsKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEwNiw4
ICsxMTIsNyBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFTQ0lJRmlsZTooTlNVCiAgICAg
SlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
CiAgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CiAgICAgcmVzdWx0LT5tX3NvdXJj
ZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7Ci0gICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9IGNhY2hlUGF0aDsKLSAgICBb
cmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRUeXBlTW9k
dWxlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNiw2ICsxMjEsNTMgQEAgKyAoaW5z
dGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUgogICAgIHJldHVybiBbSlNTY3JpcHQg
c2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOnZtIHdpdGhDb2Rl
U2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwogfQog
CitzdGF0aWMgSlNTY3JpcHQgKmNyZWF0ZUVycm9yKE5TU3RyaW5nICptZXNzYWdlLCBOU0Vycm9y
KiogZXJyb3IpCit7CisgICAgaWYgKGVycm9yKQorICAgICAgICAqZXJyb3IgPSBbTlNFcnJvciBl
cnJvcldpdGhEb21haW46QCJKU1NjcmlwdEVycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86QHsg
QCJtZXNzYWdlIjogbWVzc2FnZSB9XTsKKyAgICByZXR1cm4gbmlsOworfQorCisrIChpbnN0YW5j
ZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSB3aXRoU291cmNlOihOU1N0cmlu
ZyAqKXNvdXJjZSBhbmRTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5dGVjb2RlQ2Fj
aGU6KE5TVVJMICopY2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bSBlcnJvcjoob3V0IE5TRXJyb3IgKiopZXJyb3IKK3sKKyAgICBVTlVTRURfUEFSQU0oZXJy
b3IpOworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9IHZtOworICAgIHJlc3Vs
dC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJl
c3VsdC0+bV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0aCA9
IGNhY2hlUGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVt
b3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCB3aXRoU291cmNlVVJMOihO
U1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aCBpblZp
cnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gZXJyb3I6KG91dCBOU0Vycm9yICoq
KWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwo
W2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmls
ZSgpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJGaWxlIHBhdGggJUAgaXMgbm90IGEgbG9jYWwgZmlsZSIsIHN0YXRpY19jYXN0PE5TU3Ry
aW5nICo+KGZpbGVQYXRoVVJMKV0sIGVycm9yKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OworICAgIFN0cmluZyBzeXN0ZW1QYXRoID0gZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKTsK
KyAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBmaWxlRGF0YShzeXN0ZW1QYXRoLCBzdWNj
ZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBjcmVhdGVFcnJvcihbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZpbGUgYXQgcGF0aCAlQCBjb3VsZCBub3QgYmUgbWFw
cGVkLiIsIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KHN5c3RlbVBhdGgpXSwgZXJyb3IpOworCisg
ICAgaWYgKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpCisgICAgICAgIHJldHVybiBj
cmVhdGVFcnJvcihbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk5vdCBhbGwgY2hhcmFjdGVy
cyBpbiBmaWxlIGF0ICVAIGFyZSBBU0NJSS4iLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihzeXN0
ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIHJlc3VsdC0+bV92aXJ0dWFsTWFjaGluZSA9
IHZtOworICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKKyAgICByZXN1bHQtPm1fc291cmNlID0g
U3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJpdHdpc2VfY2FzdDxjb25z
dCBMQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSkpOworICAgIHJlc3Vs
dC0+bV9tYXBwZWRTb3VyY2UgPSBXVEZNb3ZlKGZpbGVEYXRhKTsKKyAgICByZXN1bHQtPm1fc291
cmNlVVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7
CisgICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZv
aWQpZGVhbGxvYwogewogICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNo
ZWRCeXRlY29kZS5vd25lZCgpKQpAQCAtMTUyLDIyICsyMDQsMjYgQEAgLSAodm9pZClyZWFkQ2Fj
aGUKICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwg
c2l6ZSB9OwogfQogCi0tICh2b2lkKXdyaXRlQ2FjaGUKKy0gKEJPT0wpY2FjaGVCeXRlY29kZVdp
dGhFcnJvcjooTlNFcnJvciAqKillcnJvcgogewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNp
emUoKSB8fCAhbV9jYWNoZVBhdGgpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgZXJyb3JT
dHJpbmcgeyB9OworICAgIFtzZWxmIHdyaXRlQ2FjaGU6ZXJyb3JTdHJpbmddOworICAgIGlmICgh
ZXJyb3JTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgY3JlYXRlRXJyb3IoZXJyb3JTdHJpbmcs
IGVycm9yKTsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KIAotICAgIEpTQzo6UGFyc2VyRXJy
b3IgZXJyb3I7Ci0gICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRl
Y29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBtX2pzU291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBl
cnJvcik7Ci0gICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlu
dCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dS
T05MWSwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKQotICAgICAgICByZXR1cm47Ci0gICAgaW50
IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBpZiAoIXJjKQotICAgICAg
ICB3cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6
ZSgpKTsKLSAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoTlNVUkwgKilz
b3VyY2VVUkwKK3sKKyAgICByZXR1cm4gbV9zb3VyY2VVUkwuZ2V0KCk7Cit9CisKKy0gKEpTU2Ny
aXB0VHlwZSl0eXBlCit7CisgICAgcmV0dXJuIG1fdHlwZTsKIH0KIAogQGVuZApAQCAtMTg5LDI0
ICsyNDUsNzUgQEAgLSAoY29uc3QgSlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZQogICAg
IHJldHVybiAmbV9jYWNoZWRCeXRlY29kZTsKIH0KIAotLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpz
U291cmNlQ29kZTooY29uc3QgSlNDOjpJZGVudGlmaWVyJiltb2R1bGVLZXkKKy0gKEpTQzo6SlNT
b3VyY2VDb2RlKilqc1NvdXJjZUNvZGUKIHsKLSAgICBpZiAobV9qc1NvdXJjZUNvZGUpIHsKLSAg
ICAgICAgQVNTRVJUKG1vZHVsZUtleS5pbXBsKCkgPT0gbV9tb2R1bGVLZXkpOworICAgIGlmICht
X2pzU291cmNlQ29kZSkKICAgICAgICAgcmV0dXJuIG1fanNTb3VyY2VDb2RlLmdldCgpOworCisg
ICAgcmV0dXJuIFtzZWxmIGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdOworfQorCistIChCT09M
KXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5z
aXplKCkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoIW1fY2FjaGVQYXRoKSB7Cisg
ICAgICAgIGVycm9yID0gIk5vIGNhY2hlIHdhcyBwYXRoIHByb3ZpZGVkIGR1cmluZyBjb25zdHJ1
Y3Rpb24gb2YgdGhpcyBKU1NjcmlwdC4iX3M7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisK
KyAgICBKU0M6OlBhcnNlckVycm9yIHBhcnNlckVycm9yOworICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgY2FzZSBrSlNTY3JpcHRUeXBlTW9kdWxlOgorICAgICAgICBtX2NhY2hlZEJ5dGVjb2Rl
ID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxm
IGpzU291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGtKU1NjcmlwdFR5cGVQcm9ncmFtOgorICAgICAgICBtX2NhY2hlZEJ5dGVj
b2RlID0gSlNDOjpnZW5lcmF0ZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIFtzZWxmIGpz
U291cmNlQ29kZV0tPnNvdXJjZUNvZGUoKSwgcGFyc2VyRXJyb3IpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAocGFyc2VyRXJyb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fY2Fj
aGVkQnl0ZWNvZGUgPSB7IH07CisgICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5hYmxlIHRv
IGdlbmVyYXRlIGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IGJlY2F1c2Ugb2YgYSBwYXJzZXIg
ZXJyb3I6ICIsIHBhcnNlckVycm9yLm1lc3NhZ2UoKSk7CisgICAgICAgIHJldHVybiBOTzsKKyAg
ICB9CisKKyAgICBpbnQgZmQgPSBvcGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBP
X0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBl
cnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBvcGVuIGZpbGU6ICIsIFttX2NhY2hlUGF0aCBw
YXRoXS5VVEY4U3RyaW5nLCAiIGR1ZSB0byBlcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgcmV0dXJuIE5POwogICAgIH0KKyAgICBpbnQgcmV0dXJuQ29kZSA9IGZsb2NrKGZkLCBM
T0NLX0VYIHwgTE9DS19OQik7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgICAgIGVycm9yID0g
IlVuYWJsZSB0byBsb2NrIHRoZSBjYWNoZSBmaWxlOyBpdCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Uu
Il9zOworICAgIGVsc2UKKyAgICAgICAgd3JpdGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgp
LCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAh
cmV0dXJuQ29kZTsKK30KKworLSAodm9pZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsCit7Cisg
ICAgbV9zb3VyY2VVUkwgPSB1cmw7Cit9CiAKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJl
Y3JlYXRlSlNTb3VyY2VDb2RlCit7CiAgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5l
LnZtOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKICAgICBUZXh0UG9zaXRp
b24gc3RhcnRQb3NpdGlvbiB7IH07Ci0gICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6
U291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtleS5zdHJp
bmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9k
dWxlKTsKKworICAgIFN0cmluZyB1cmwgPSBTdHJpbmcgeyBbW3NlbGYgc291cmNlVVJMXSBhYnNv
bHV0ZVN0cmluZ10gfTsKKyAgICBhdXRvIHR5cGUgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZU1v
ZHVsZSA/IEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUgOiBKU0M6OlNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbTsKKyAgICBSZWY8SlNTY3JpcHRTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIgPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc2Vs
ZiwgSlNDOjpTb3VyY2VPcmlnaW4odXJsKSwgVVJMKHsgfSwgdXJsKSwgc3RhcnRQb3NpdGlvbiwg
dHlwZSk7CiAgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92
aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24u
bV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CiAgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNl
Q29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkp
OwogICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2RlKTsKLSAgICBbc2VsZiB3
cml0ZUNhY2hlXTsKICAgICByZXR1cm4ganNTb3VyY2VDb2RlOwogfQogCiBAZW5kCiAKLQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwu
aAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Njcmlw
dEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEyIEBAIGNsYXNzIFN0cmlu
ZzsKIAogLSAodW5zaWduZWQpaGFzaDsKIC0gKGNvbnN0IFdURjo6U3RyaW5nJilzb3VyY2U7Ci0t
IChjb25zdCBKU0M6OkNhY2hlZEJ5dGVjb2RlKiljYWNoZWRCeXRlY29kZTsKLS0gKEpTQzo6SlNT
b3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNvbnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5
OworLSAobnVsbGFibGUgY29uc3QgSlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7
CistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOworLy8gRklYTUU6IFJlbW92ZSB0
aGlzIG9uY2Ugd2UgcmVxdWlyZSBzb3VyY2VVUkwgdXBvbiBjcmVhdGlvbjogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDkwOQorLSAoSlNDOjpKU1NvdXJjZUNvZGUq
KWZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGU7CistIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYp
ZXJyb3I7CistICh2b2lkKXNldFNvdXJjZVVSTDooTlNVUkwgKil1cmw7CiAKIEBlbmQKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rp
b25PdmVycmlkZXNUZXN0LmNwcAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIGludCB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKQogCiAgICAgY29u
c3QgY2hhciogb2xkRnVuY3Rpb25PdmVycmlkZXMgPSBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRl
cygpOwogICAgIAotICAgIE9wdGlvbnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkgPSAidGVzdGFwaS1m
dW5jdGlvbi1vdmVycmlkZXMuanMiOworICAgIE9wdGlvbnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCkg
PSAiLi90ZXN0YXBpU2NyaXB0cy90ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyI7CiAgICAg
SlNDOjpGdW5jdGlvbk92ZXJyaWRlczo6cmVpbnN0YWxsT3ZlcnJpZGVzKCk7CiAKICAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAobnVs
bHB0ciwgbnVsbHB0cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rl
c3RJbmNsdWRlcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdEluY2x1ZGVzLm0JKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdEluY2x1ZGVzLm0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKIAogLy8gU2luY2Ugd2UgaW5jbHVkZSBmaWxlcyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRo
cm91Z2ggdGhlIHJld3JpdGVyIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBub24tcmV3cml0dGVuIHZh
bHVlcy4uLgogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCisjZGVmaW5lIEpTQ19BUElf
REVQUkVDQVRFRCguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKQogI2RlZmlu
ZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24g
MjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwxOCBAQAogI2luY2x1ZGUgIkpTU2NyaXB0UmVmUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nUmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkpTV2Vh
a1ByaXZhdGUuaCIKKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRp
ZgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUg
PHRpbWUuaD4KKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKICNpZiBPUyhXSU5ET1dTKQpAQCAtNjcsNyAr
NzQsNyBAQAogI2VuZGlmCiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotdm9pZCB0ZXN0T2Jq
ZWN0aXZlQ0FQSSh2b2lkKTsKK3ZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwog
I2VuZGlmCiAKIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIpOwpAQCAtMTM4
MCwxMSArMTM4NywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFNl
dEVycm9yTW9kZSgwKTsKICNlbmRpZgogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICB0
ZXN0T2JqZWN0aXZlQ0FQSSgpOworI2lmICFPUyhXSU5ET1dTKQorICAgIGNoYXIgcmVzb2x2ZWRQ
YXRoW1BBVEhfTUFYXTsKKyAgICByZWFscGF0aChhcmd2WzBdLCByZXNvbHZlZFBhdGgpOyAKKyAg
ICBjaGFyKiBuZXdDV0QgPSBkaXJuYW1lKHJlc29sdmVkUGF0aCk7CisgICAgaWYgKGNoZGlyKG5l
d0NXRCkpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiQ291bGQgbm90IGNoZGlyIHRvOiAlc1xu
IiwgbmV3Q1dEKTsKICNlbmRpZgogCiAgICAgY29uc3QgY2hhciogZmlsdGVyID0gYXJnYyA+IDEg
PyBhcmd2WzFdIDogTlVMTDsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIHRlc3RPYmpl
Y3RpdmVDQVBJKGZpbHRlcik7CisjZW5kaWYKKwogICAgIFJFTEVBU0VfQVNTRVJUKCF0ZXN0Q0FQ
SVZpYUNwcChmaWx0ZXIpKTsKICAgICBpZiAoZmlsdGVyKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE5NzksNyArMTk5NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
SlNPYmplY3RNYWtlQ29uc3RydWN0b3IoY29udGV4dCwgbnVsbENsYXNzLCAwKTsKICAgICBKU0Ns
YXNzUmVsZWFzZShudWxsQ2xhc3MpOwogCi0gICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICJ0
ZXN0YXBpLmpzIjsKKyAgICBjb25zdCBjaGFyKiBzY3JpcHRQYXRoID0gIi4vdGVzdGFwaVNjcmlw
dHMvdGVzdGFwaS5qcyI7CiAgICAgY2hhciogc2NyaXB0VVRGOCA9IGNyZWF0ZVN0cmluZ1dpdGhD
b250ZW50c09mRmlsZShzY3JpcHRQYXRoKTsKICAgICBpZiAoIXNjcmlwdFVURjgpIHsKICAgICAg
ICAgcHJpbnRmKCJGQUlMOiBUZXN0IHNjcmlwdCBjb3VsZCBub3QgYmUgbG9hZGVkLlxuIik7CkBA
IC0yMDgyLDEzICsyMDk3LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAg
ICAgICAgIH0KICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKICAgICB9
Ci0gICAgZmFpbGVkID0gdGVzdFR5cGVkQXJyYXlDQVBJKCkgfHwgZmFpbGVkOwotICAgIGZhaWxl
ZCA9IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVz
dEZ1bmN0aW9uT3ZlcnJpZGVzKCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RHbG9iYWxD
b250ZXh0V2l0aEZpbmFsaXplcigpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0UGluZ1Bv
bmdTdGFja092ZXJmbG93KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RKU09OUGFyc2Uo
KSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoKSB8
fCBmYWlsZWQ7CisgICAgZmFpbGVkIHw9IHRlc3RUeXBlZEFycmF5Q0FQSSgpOworICAgIGZhaWxl
ZCB8PSB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCk7CisgICAgZmFpbGVkIHw9IHRlc3RGdW5jdGlv
bk92ZXJyaWRlcygpOworICAgIGZhaWxlZCB8PSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6
ZXIoKTsKKyAgICBmYWlsZWQgfD0gdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdygpOworICAgIGZh
aWxlZCB8PSB0ZXN0SlNPTlBhcnNlKCk7CisgICAgZmFpbGVkIHw9IHRlc3RKU09iamVjdEdldFBy
b3h5VGFyZ2V0KCk7CiAKICAgICAvLyBDbGVhciBvdXQgbG9jYWwgdmFyaWFibGVzIHBvaW50aW5n
IGF0IEpTT2JqZWN0UmVmcyB0byBhbGxvdyB0aGVpciB2YWx1ZXMgdG8gYmUgY29sbGVjdGVkCiAg
ICAgZnVuY3Rpb24gPSBOVUxMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQAog
I2ltcG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5oIgogCisj
aWYgX19oYXNfaW5jbHVkZSg8bGlicHJvYy5oPikKKyNkZWZpbmUgSEFTX0xJQlBST0MgMQorI2lt
cG9ydCA8bGlicHJvYy5oPgorI2Vsc2UKKyNkZWZpbmUgSEFTX0xJQlBST0MgMAorI2VuZGlmCiAj
aW1wb3J0IDxwdGhyZWFkLmg+CiAjaW1wb3J0IDx2ZWN0b3I+CiAjaW1wb3J0IDx3dGYvTWVtb3J5
Rm9vdHByaW50Lmg+CkBAIC01NCw3ICs2MCw3IEBAIGV4dGVybiAiQyIgYm9vbCBfQmxvY2tfaGFz
X3NpZ25hdHVyZShpZCkKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUo
aWQpOwogCiBleHRlcm4gaW50IGZhaWxlZDsKLWV4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFy
Kik7CiBleHRlcm4gIkMiIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKiwgYm9vbCk7CiAKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRApAQCAtMTk4MCwyMiArMTk4NiwzMCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJ5
dGVjb2RlQ2FjaGUoKQorc3RhdGljIE5TVVJMICp0ZW1wRmlsZShOU1N0cmluZyAqc3RyaW5nKQor
eworICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgcmV0dXJuIFt0ZW1wRGly
ZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzdHJpbmddOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0TW9kdWxlQnl0ZWNvZGVDYWNoZSgpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7
Ci0gICAgICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpO
U1RlbXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisgICAgICAgIE5TU3RyaW5n
ICpmb29Tb3VyY2UgPSBAImltcG9ydCAnb3RoZXJEaXJlY3RvcnkvYmF6LmpzJzsgZXhwb3J0IGxl
dCBuID0gbnVsbDsiOworICAgICAgICBOU1N0cmluZyAqYmFyU291cmNlID0gQCJpbXBvcnQgeyBu
IH0gZnJvbSAnLi4vZm9vLmpzJzsgZXhwb3J0IGxldCBmb28gPSAoKSA9PiBuOyI7CisgICAgICAg
IE5TU3RyaW5nICpiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gJy4uL2RpcmVjdG9y
eS9iYXIuanMnOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IGV4cG9ydCBsZXQgZXhwID0gZm9vKCk7
IjsKIAotICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBc
Ii4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKLSAgICAgICAgTlNTdHJpbmcqIGJh
clNvdXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQg
biA9IG51bGw7IjsKLSAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9v
IH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBl
eHBvcnQgbGV0IGV4cCA9IGZvbzsiOworICAgICAgICBOU1VSTCAqZm9vUGF0aCA9IHRlbXBGaWxl
KEAiZm9vLmpzIik7CisgICAgICAgIE5TVVJMICpiYXJQYXRoID0gdGVtcEZpbGUoQCJiYXIuanMi
KTsKKyAgICAgICAgTlNVUkwgKmJhelBhdGggPSB0ZW1wRmlsZShAImJhei5qcyIpOwogCi0gICAg
ICAgIE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiZm9vLmpzIl07Ci0gICAgICAgIE5TVVJMKiBiYXJQYXRoID0gW3RlbXBEaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzIl07Ci0gICAgICAgIE5TVVJM
KiBiYXpQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
YmF6LmpzIl07CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5q
cy5jYWNoZSIpOworICAgICAgICBOU1VSTCAqYmFyQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJiYXIu
anMuY2FjaGUiKTsKKyAgICAgICAgTlNVUkwgKmJhekNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmF6
LmpzLmNhY2hlIik7CiAKLSAgICAgICAgTlNVUkwqIGZvb0NhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0
b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcy5jYWNoZSJdOwotICAgICAg
ICBOU1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiYmFyLmpzLmNhY2hlIl07Ci0gICAgICAgIE5TVVJMKiBiYXpDYWNoZVBhdGgg
PSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXouanMuY2Fj
aGUiXTsKKyAgICAgICAgTlNVUkwgKmZvb0Zha2VQYXRoID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpAIi9mb28uanMiXTsKKyAgICAgICAgTlNVUkwgKmJhckZha2VQYXRoID0gW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkvYmFyLmpzIl07CisgICAgICAgIE5TVVJMICpiYXpGYWtl
UGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl07
CiAKICAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1BhdGggYXRvbWljYWxseTpOTyBl
bmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKICAgICAgICAgW2JhclNv
dXJjZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3Ry
aW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKQEAgLTIwMDMsMTMgKzIwMTcsMTkgQEAgc3RhdGljIHZv
aWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogCiAgICAgICAgIGF1dG8gYmxvY2sgPSBeKEpTQ29udGV4
dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1
ZSAqcmVqZWN0KSB7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkg
PSB0cnVlOwotICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZp
bGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxX
aXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpblZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBh
bmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtp
ZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCi0gICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFT
Q0lJRmlsZTpiYXJQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3
aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoXV1dOwotICAg
ICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9v
dGhlckRpcmVjdG9yeS9iYXouanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0
aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhelBhdGggaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5k
Qnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gbmlsOworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpbZm9vRmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAg
ICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmb29QYXRoIHdpdGhTb3VyY2VVUkw6Zm9vRmFr
ZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250
ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRl
bnRpZmllciBpc0VxdWFsVG9PYmplY3Q6W2JhckZha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisg
ICAgICAgICAgICAgICAgc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRU
eXBlTW9kdWxlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFyUGF0aCB3aXRoU291cmNlVVJM
OmJhckZha2VQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBp
ZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OltiYXpGYWtlUGF0aCBhYnNvbHV0ZVN0cmlu
Z11dKQorICAgICAgICAgICAgICAgIHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pT
U2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhelBhdGggd2l0aFNv
dXJjZVVSTDpiYXpGYWtlUGF0aCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aCBpblZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKworICAgICAgICAg
ICAgaWYgKHNjcmlwdCkgeworICAgICAgICAgICAgICAgIGlmICghW3NjcmlwdCBjYWNoZUJ5dGVj
b2RlV2l0aEVycm9yOm5pbF0pCisgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtb
SlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250
ZXh0OmNvbnRleHRdXV07CiAgICAgICAgIH07CiAKQEAgLTIwMjMsMTIgKzIwNDMsNzUgQEAgc3Rh
dGljIHZvaWQgdGVzdEJ5dGVjb2RlQ2FjaGUoKQogICAgICAgICB9CiAKICAgICAgICAgTlNGaWxl
TWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0g
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOwot
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhclBhdGggZXJyb3I6bmlsXTsK
LSAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07
Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9y
Om5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyQ2FjaGVQYXRo
IGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6Q2Fj
aGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IHRydWU7CisgICAg
ICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29QYXRoIGVy
cm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRBbGwgJj0gW2ZpbGVNYW5h
Z2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJlbW92ZWRB
bGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmls
XTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJh
ckNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdl
ciByZW1vdmVJdGVtQXRVUkw6YmF6Q2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNr
UmVzdWx0KEAiUmVtb3ZlZCBhbGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0UHJvZ3JhbUJ5dGVjb2RlQ2FjaGUoKQoreworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0gQCJmdW5j
dGlvbiBmb28oKSB7IHJldHVybiA0MjsgfTsgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gNDA7IH07
IGZvbygpICsgYmFyKCk7IjsKKyAgICAgICAgTlNVUkwgKmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxl
KEAiZm9vLmpzLmNhY2hlIik7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBz
Y3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpmb29Tb3VyY2UgYW5k
U291cmNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZEJ5dGVjb2RlQ2Fj
aGU6Zm9vQ2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBl
cnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBpZiAo
IVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpuaWxdKQorICAgICAgICAgICAgQ1JBU0go
KTsKKworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSB0cnVlOworICAg
ICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KFtyZXN1bHQgaXNOdW1iZXJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgb2YgY2Fj
aGVkIHByb2dyYW0gaXMgNDArNDIiLCBbW3Jlc3VsdCB0b051bWJlcl0gaW50VmFsdWVdID09IDQw
ICsgNDIpOworICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsK
KworICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXTsKKyAgICAgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2VyIHJl
bW92ZUl0ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJSZW1vdmVkIGFsbCB0ZW1wIGZpbGVzIGNyZWF0ZWQiLCByZW1vdmVkQWxsKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5bnRheEVycm9yKEpTU2Ny
aXB0VHlwZSB0eXBlKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBOU1N0cmlu
ZyAqZm9vU291cmNlID0gQCJ0aGlzIGlzIGEgc3ludGF4IGVycm9yIjsKKyAgICAgICAgTlNVUkwg
KmZvb0NhY2hlUGF0aCA9IHRlbXBGaWxlKEAiZm9vLmpzLmNhY2hlIik7CisgICAgICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNTY3Jp
cHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6dHlwZSB3aXRoU291cmNlOmZvb1Nv
dXJjZSBhbmRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJteS1wYXRoIl0gYW5kQnl0
ZWNvZGVDYWNoZTpmb29DYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxN
YWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAg
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICBpZiAoW3NjcmlwdCBjYWNoZUJ5dGVj
b2RlV2l0aEVycm9yOiZlcnJvcl0pCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChlcnJvcik7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiR290IGVycm9yIHdoZW4g
dHJ5aW5nIHRvIGNhY2hlIGJ5dGVjb2RlIGZvciBhIHNjcmlwdCB3aXRoIGEgc3ludGF4IGVycm9y
LiIsIFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3RyaW5nOkAiVW5hYmxlIHRvIGdlbmVy
YXRlIGJ5dGVjb2RlIGZvciB0aGlzIEpTU2NyaXB0IGJlY2F1c2Ugb2YgYSBwYXJzZXIgZXJyb3Ii
XSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9u
KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKnNvdXJjZSA9
IEAidGhyb3cgNDI7IjsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlw
dE9mVHlwZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBhbmRTb3VyY2VV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJteS1wYXRoIl0gYW5kQnl0ZWNvZGVDYWNoZTpuaWwg
aW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIF9fYmxvY2sgYm9vbCBoYW5kbGVk
RXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4o
SlNDb250ZXh0ICosIEpTVmFsdWUgKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgaGFuZGxlZEV4
Y2VwdGlvbiA9IHRydWU7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChbZXhjZXB0aW9uIGlz
TnVtYmVyXSk7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0
aCBleGNlcHRpb24gc2hvdWxkIGhhdmUgdGhlIGV4Y2VwdGlvbiB2YWx1ZSBiZSA0Mi4iLCBbW2V4
Y2VwdGlvbiB0b051bWJlcl0gaW50VmFsdWVdID09IDQyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUHJv
Z3JhbSBKU1NjcmlwdCB3aXRoIGV4Y2VwdGlvbiBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZC4iLCBb
cmVzdWx0IGlzVW5kZWZpbmVkXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUHJvZ3JhbSBKU1Nj
cmlwdCB3aXRoIGV4Y2VwdGlvbiBzaG91bGQgY2FsbCBleGNlcHRpb24gaGFuZGxlci4iLCBoYW5k
bGVkRXhjZXB0aW9uKTsKICAgICB9CiB9CiAKQEAgLTIwNzgsNyArMjE2MSw3IEBAIC0gKHZvaWQp
Y29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXQKIAogQGVuZAogCi1zdGF0aWMgdm9pZCB0
ZXN0TG9hZEJhc2ljRmlsZSgpCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZUxlZ2FjeVNQ
SSgpCiB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBb
SlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOwpAQCAtMjA4OSwzNCArMjE3
MiwxNzIgQEAgc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQogICAgIH0KIH0KIAotdm9p
ZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCisKK0BpbnRlcmZhY2UgSlNDb250ZXh0TWVtb3J5TWFwcGVk
TG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysg
KGluc3RhbmNldHlwZSluZXdDb250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0Nv
bnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSlu
ZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRNZW1vcnlNYXBwZWRM
b2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAo
dm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVz
b2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZp
bGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAg
ICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCB3aXRoU291cmNlVVJMOmZpbGVQ
YXRoIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZSBlcnJvcjpuaWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNh
bGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNh
bGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpA
IlVuYWJsZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVu
ZAorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisjaWYgSEFTX0xJQlBST0MK
KyAgICBzaXplX3QgY291bnQgPSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZE
UywgMCwgMCwgMCk7CisjZW5kaWYKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0
byAqY29udGV4dCA9IFtKU0NvbnRleHRNZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250
ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7Cisg
ICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9y
dCgnLi9iYXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsK
KyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6
Y29udGV4dF07CisjaWYgSEFTX0xJQlBST0MKKyAgICAgICAgc2l6ZV90IGFmdGVyQ291bnQgPSBw
cm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiSlNTY3JpcHQgc2hvdWxkIG5vdCBob2xkIGEgZmlsZSBkZXNjcmlwdG9y
IiwgY291bnQgPT0gYWZ0ZXJDb3VudCk7CisjZW5kaWYKKyAgICAgICAgY2hlY2tNb2R1bGVDb2Rl
UmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KKyNpZiBIQVNfTElCUFJPQworICAg
IHNpemVfdCBhZnRlciA9IHByb2NfcGlkaW5mbyhnZXRwaWQoKSwgUFJPQ19QSURMSVNURkRTLCAw
LCAwLCAwKTsKKyAgICBjaGVja1Jlc3VsdChAIkZpbGUgZGVzY3JpcHRvciBjb3VudCBzaG9sdWRu
J3QgY2hhbmdlIGFmdGVyIGNvbnRleHQgaXMgZGVhbGxvY2VkIiwgY291bnQgPT0gYWZ0ZXIpOwor
I2VuZGlmCit9CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUg
OiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSlu
ZXdDb250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRBdWdtZW50ZWRM
b2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAg
YXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSBhbGxvY10g
aW5pdF07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRl
eHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZp
ZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVy
OihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlamVjdCk7CisKKyAgICBO
U1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmllciB0b1N0cmlu
Z11dOworICAgIE5TU3RyaW5nICpwYXRoU3RyaW5nID0gW2ZpbGVQYXRoIGFic29sdXRlU3RyaW5n
XTsKKyAgICBpZiAoW3BhdGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXNpYy5qcyJdIHx8IFtw
YXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiZm9vLmpzIl0pIHsKKyAgICAgICAgYXV0byAqc2Ny
aXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1h
cHBlZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpmaWxlUGF0aCBhbmRCeXRl
Y29kZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJy
b3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgW3Jlc29s
dmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChbcGF0aFN0cmluZyBjb250YWluc1N0cmluZzpAImJhci5qcyJdKSB7CisgICAg
ICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1v
ZHVsZSB3aXRoU291cmNlOkAiIiBhbmRTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpA
Ii9ub3QvcGF0aC90by9iYXIuanMiXSBhbmRCeXRlY29kZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNo
aW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2NyaXB0KTsKKyAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3Jp
cHRdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdEpTU2NyaXB0VVJMKCkKK3sK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRl
eHRBdWdtZW50ZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5t
b2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIE5TVVJMICpiYXNpYyA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiLi9iYXNpYy5qcyIgcmVsYXRpdmVUb1VSTDpyZXNvbHZlUGF0
aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDEgPSBbSlNTY3JpcHQgc2Ny
aXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpi
YXNpYyB3aXRoU291cmNlVVJMOmJhc2ljIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpuaWxdOworCisgICAgICAgIEpTVmFs
dWUgKnJlc3VsdDEgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDFdOworICAgICAg
ICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHJlc3VsdDEsIG51bGwpOwor
CisgICAgICAgIE5TVVJMICpmb28gPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIi4vZm9vLmpzIiBy
ZWxhdGl2ZVRvVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1NjcmlwdCAq
c2NyaXB0MiA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1v
cnlNYXBwZWRGcm9tQVNDSUlGaWxlOmZvbyB3aXRoU291cmNlVVJMOmZvbyBhbmRCeXRlY29kZUNh
Y2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6bmls
XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0Mik7CisgICAgICAgIEpTVmFsdWUgKnJl
c3VsdDIgPSBbY29udGV4dCBldmFsdWF0ZUpTU2NyaXB0OnNjcmlwdDJdOworCisgICAgICAgIF9f
YmxvY2sgYm9vbCB3YXNSZWplY3RlZCA9IGZhbHNlOworICAgICAgICBbcmVzdWx0MiBpbnZva2VN
ZXRob2Q6QCJjYXRjaCIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqcmVhc29uKSB7CisgICAg
ICAgICAgICB3YXNSZWplY3RlZCA9IFtyZWFzb24gaXNPYmplY3RdOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoW1tyZWFzb24gdG9TdHJpbmddIGNvbnRhaW5zU3RyaW5nOkAiVGhlIHNhbWUg
SlNTY3JpcHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzIl0pOwor
ICAgICAgICB9XV07CisKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJNb2R1bGUgSlNTY3JpcHQgaW1w
b3J0ZWQgd2l0aCBkaWZmZXJlbnQgaWRlbnRpZmllcnMgaXMgcmVqZWN0ZWQiLCB3YXNSZWplY3Rl
ZCk7CisgICAgfQorfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7IFwKKyAgICAgICAgaWYgKCFz
aG91bGRSdW4oI3Rlc3QpKSBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICBOU0xvZyhA
IiVzLi4uXG4iLCAjdGVzdCk7IFwKKyAgICAgICAgdGVzdDsgXAorICAgICAgICBOU0xvZyhAIiVz
OiBkb25lLlxuIiwgI3Rlc3QpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK3ZvaWQgdGVzdE9i
amVjdGl2ZUNBUEkoY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBP
YmplY3RpdmUtQyBBUEkiKTsKIAotICAgIGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCk7Ci0gICAg
cnVuSklUVGhyZWFkTGltaXRUZXN0cygpOworICAgIGF1dG8gc2hvdWxkUnVuID0gWyZdIChjb25z
dCBjaGFyKiB0ZXN0KSAtPiBib29sIHsKKyAgICAgICAgaWYgKGZpbHRlcikKKyAgICAgICAgICAg
IHJldHVybiBzdHJjYXNlc3RyKHRlc3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH07CisKKyAgICBSVU4oY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKSk7CisgICAgUlVOKHJ1
bkpJVFRocmVhZExpbWl0VGVzdHMoKSk7CisKKyAgICBSVU4odGVzdExvYWRlclJlc29sdmVzQWJz
b2x1dGVTY3JpcHRVUkwoKSk7CisgICAgUlVOKHRlc3RGZXRjaCgpKTsKKyAgICBSVU4odGVzdEZl
dGNoV2l0aFR3b0N5Y2xlKCkpOworICAgIFJVTih0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpKTsK
KyAgICBSVU4odGVzdEltcG9ydE1vZHVsZVR3aWNlKCkpOworICAgIFJVTih0ZXN0TW9kdWxlQnl0
ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkpOworICAg
IFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSkpOworICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihrSlNTY3JpcHRU
eXBlTW9kdWxlKSk7CisgICAgUlVOKHRlc3RQcm9ncmFtSlNTY3JpcHRFeGNlcHRpb24oKSk7CiAK
LSAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOwotICAgIHRlc3RGZXRj
aCgpOwotICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOwotICAgIHRlc3RGZXRjaFdpdGhUaHJl
ZUN5Y2xlKCk7Ci0gICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7Ci0gICAgdGVzdEJ5dGVjb2Rl
Q2FjaGUoKTsKKyAgICBSVU4odGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKSk7CisgICAg
UlVOKHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKSk7CiAKLSAgICB0ZXN0TG9hZGVyUmVq
ZWN0c05pbFNjcmlwdFVSTCgpOwotICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsK
KyAgICBSVU4odGVzdEpTU2NyaXB0VVJMKCkpOwogCiAgICAgLy8gRmlsZSBsb2FkaW5nCi0gICAg
dGVzdExvYWRCYXNpY0ZpbGUoKTsKKyAgICBSVU4odGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEko
KSk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlKCkpOwogCi0gICAgcHJvbWlzZVdpdGhFeGVj
dXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3Io
UmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1
dGlvbjo6UmVzb2x2ZUxhdGUpOwotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6
UmVqZWN0TGF0ZSk7Ci0gICAgcHJvbWlzZVJlamVjdE9uSlNFeGNlcHRpb24oKTsKLSAgICBwcm9t
aXNlQ3JlYXRlUmVzb2x2ZWQoKTsKLSAgICBwcm9taXNlQ3JlYXRlUmVqZWN0ZWQoKTsKLSAgICBw
YXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9y
KFJlc29sdXRpb246OlJlc29sdmVFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9y
KFJlc29sdXRpb246OlJlamVjdEVhZ2VyKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3Io
UmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZWplY3RMYXRlKSk7CisgICAgUlVOKHByb21pc2VSZWplY3RPbkpTRXhjZXB0
aW9uKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVzb2x2ZWQoKSk7CisgICAgUlVOKHByb21p
c2VDcmVhdGVSZWplY3RlZCgpKTsKKyAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3Qo
KSk7CiAKICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNj
cmlwdHMvZm9vLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0ICIuL2Jhci5qcyI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQxODY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTg4NCw2ICs4ODQsNyBAQAogCQk1MkIzMTEwMTE5NzVCNDY3
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9j
YXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUy
QjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRDEzMDkxMjIxQ0UxNzYwMDlDODM2QyAv
KiBmb28uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovOyB9OwogCQk1
MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3
MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1
MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAy
NkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CiAJCTUzMEE2NkJBMUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlNC1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkI4MUZBM0U3N0UwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlNC1tbS5tbSAqLzsgfTsKQEAgLTExNjAsNiArMTE2MSw3IEBACiAJCTc5N0UwN0FBMUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8q
IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg2OTQzQTFG
OEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyog
SlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9
OwogCQk3OTg5Mzc3OTFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBG
OEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdp
bk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5
RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhC
ODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMjksNiAr
MjAzMSw3IEBACiAJCQlkc3RQYXRoID0gdGVzdGFwaVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJT
cGVjID0gMTY7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyog
Zm9vLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNTNDM0Q1RTUyMUVDRTc3MjAw
ODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhC
MkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENv
cHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRl
c3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKQEAgLTMzNzcsNiArMzM4MCw3IEBA
CiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMwQTYz
NDAxRkEzRTMxQzAwMjZBNTQ1IC8qIFNvdXJjZXNDb2NvYS50eHQgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gU291cmNlc0NvY29hLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3
NzIsNiArMzc3Niw3IEBACiAJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJl
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDM5MUY4QzBBQzcwMDky
MzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODY5NDNBMUY4QzBBQzgw
MDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5
NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8q
IEpTRml4ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0ZpeGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFE
Q0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRml4ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1Rv
T3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTk1LDYgKzYwMDAs
NyBAQAogCQkJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
bW0gKi8sCiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCiAJ
CQkJMTQyNzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovLAorCQkJCTc5ODcyQzQ3
MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovLAogCQkJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8sCiAJCQkJMTQ0MEY4QUQwQTUwOEQy
MDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJMTQ0MEY4QUMw
QTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oICovLApAQCAtNjM0MCw2
ICs2MzQ2LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTND
M0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJCTUyRDEzMDhGMjIxQ0Uw
M0EwMDlDODM2QyAvKiBmb28uanMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHRlc3RhcGlTY3JpcHRz
OwogCQkJcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0czsKQEAgLTk3NTgsNiArOTc2NSw3
IEBACiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAv
KiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDExN0FEQjVGMzAw
NUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZE
RTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0E4QUY0MjE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJl
dmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgQ2FjaGVkQnl0ZWNvZGUg
Z2VuZXJhdGVCeXRlY29kZShWTSYgdm0sIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4
dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CiAKICAgICBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRl
clREWik7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3Vy
Y2UsIFNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwg
ZGVidWdnZXJNb2RlKTsKIH0KIApAQCAtMTE4LDYgKzEyMCw4IEBAIENhY2hlZEJ5dGVjb2RlIGdl
bmVyYXRlTW9kdWxlQnl0ZWNvZGUoVk0KICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRU
eXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2Ny
aXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVz
VW5kZXJURFopOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiB7
IH07CiAgICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywg
c291cmNlLCBTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgZGVidWdnZXJNb2RlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362657</attachid>
            <date>2019-02-21 15:57:15 -0800</date>
            <delta_ts>2019-02-21 16:22:23 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>66129</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIEpTU2Ny
aXB0IFNQSSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CisgICAgICAgIC0gSlNTY3JpcHQgY2FuIG5v
dyByZXByZXNlbnQgYm90aCBtb2R1bGVzIGFuZCBwcm9ncmFtcy4gVGhpcyBpcyBhIHByb3BlcnR5
CisgICAgICAgIG9mIHRoZSBzY3JpcHQgZGV0ZXJtaW5lZCBkdXJpbmcgY3JlYXRpb24uCisgICAg
ICAgIC0gSlNTY3JpcHQgbm93IHRha2VzIGEgc291cmNlVVJMIGR1cmluZyBjb25zdHJ1Y3Rpb24u
IEZvciBtb2R1bGVzLCB0aGlzIGFjdHMKKyAgICAgICAgYXMgdGhlIG1vZHVsZSBpZGVudGlmaWVy
LgorICAgICAgICAtIEpTU2NyaXB0IG5vdyBoYXMgU1BJIGZvciB3cml0aW5nIHRoZSBjYWNoZSBv
dXQgdG8gZGlzay4gV2UgZG9uJ3QgZG8gdGhpcworICAgICAgICBhdXRvbWF0aWNhbGx5LgorICAg
ICAgICAtIEpTU2NyaXB0IHdpbGwgbG9hZCB0aGUgYnl0ZWNvZGUgY2FjaGUgb24gY3JlYXRpb24g
aWYgaXQgZXhpc3RzLgorICAgICAgICAtIFdlIHJldHJvZml0IHRoZXNlIG5ldyByZXF1aXJlbWVu
dHMgb24gdGhlIHByaW9yIEpTU2NyaXB0IFNQSSB0aGF0CisgICAgICAgIHdlJ3JlIGdvaW5nIHRv
IHJlbW92ZSBhcyBzb29uIGFzIHdlIGNhbjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NDkwOS4KKyAgICAgICAgUHJldmlvdXMgU1BJIGFzc3VtZXMgYWxsIEpTU2Ny
aXB0cyBhcmUgbW9kdWxlcy4gUHJldmlvdXMgU1BJIGFsc28gYXNzaWducworICAgICAgICBhIHNv
dXJjZVVSTCB0byB0aGUgSlNTY3JpcHQgYmFzZWQgb24gd2hhdCB0aGUgbW9kdWxlIGxvYWRlciBk
ZWNpZGVkIHRoZQorICAgICAgICBpZGVudGlmaWVyIHNob3VsZCBiZS4gV2UnbGwgcmVtb3ZlIHRo
aXMgb25jZSB3ZSByZW1vdmUgdGhlIG9sZCBTUEkuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gYWRkcyBTUEkgdG8gSlNDb250ZXh0IHRvIGV2YWx1YXRlIGEgSlNTY3JpcHQuIEZv
ciBtb2R1bGVzLAorICAgICAgICB0aGlzIGlzIGxpa2UgcmV0dXJuaW5nIHRoZSByZXN1bHQgb2Yg
ZG9pbmcgZHluYW1pYyBpbXBvcnQuIEZvciBwcm9ncmFtcywKKyAgICAgICAgdGhpcyBkb2VzIG5v
cm1hbCBwcm9ncmFtIGV2YWx1YXRpb24uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFs
c28gZml4ZXMgYSBidWcgaW4gZ2VuZXJhdGVCeXRlY29kZS9nZW5lcmF0ZU1vZHVsZUJ5dGVjb2Rl
IHdoZXJlCisgICAgICAgIHdlIHdvdWxkIHRyeSB0byBjYWNoZSB0aGUgYnl0ZWNvZGUgZXZlbiBp
ZiByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2sKKyAgICAgICAgcmV0dXJuZWQg
bnVsbC4gRS5nLCBpZiB0aGUgc2NyaXB0IGhhZCBhIHN5bnRheCBlcnJvci4KKyAgICAgICAgCisg
ICAgICAgIFdoZW4gd3JpdGluZyB0ZXN0cywgSSBhbHNvIGRpc2NvdmVyZWQgdGhhdCBzb21lb25l
IHByZXZpb3VzbHkgYnJva2UKKyAgICAgICAgdGVzdGFwaS4gVGhpcyBwYXRjaCBhbHNvIGZpeGVz
IHRob3NlIGZhaWx1cmVzLiBUaGV5IHdlcmUgYnJva2VuIHdoZW4KKyAgICAgICAgd2Ugc3dpdGNo
ZWQgdG8gdXNpbmcgYSB0ZXN0YXBpU2NyaXB0cyBkaXJlY3RvcnkgdG8gaG9sZCBvdXIgdGVzdCAu
anMKKyAgICAgICAgc2NyaXB0cy4gCisKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpT
QVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNBUElH
bG9iYWxPYmplY3Q6OmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKToKKyAgICAgICAgKiBB
UEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbCk6CisgICAg
ICAgIChKU0V2YWx1YXRlU2NyaXB0KToKKyAgICAgICAgKiBBUEkvSlNCYXNlSW50ZXJuYWwuaDog
QWRkZWQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlU2NyaXB0OndpdGhTb3VyY2VVUkw6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBl
dmFsdWF0ZUpTU2NyaXB0Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRQcml2YXRlLmg6Cisg
ICAgICAgICogQVBJL0pTU2NyaXB0Lmg6CisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOmluVmlydHVhbE1hY2hpbmU6XSk6Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTpdKToKKyAgICAgICAgKGNyZWF0ZUVycm9y
KToKKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6d2l0
aFNvdXJjZVVSTDphbmRTb3VyY2U6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVtb3J5TWFwcGVkRnJv
bUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6XSk6CisgICAg
ICAgICgtW0pTU2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW0pT
U2NyaXB0IHNvdXJjZVVSTF0pOgorICAgICAgICAoLVtKU1NjcmlwdCB0eXBlXSk6CisgICAgICAg
ICgtW0pTU2NyaXB0IGpzU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0ZUNh
Y2hlOl0pOgorICAgICAgICAoLVtKU1NjcmlwdCBzZXRTb3VyY2VVUkw6XSk6CisgICAgICAgICgt
W0pTU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdKToKKyAgICAgICAgKC1bSlNTY3Jp
cHQgd3JpdGVDYWNoZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU1NjcmlwdCBqc1NvdXJjZUNv
ZGU6XSk6IERlbGV0ZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAg
ICAgKiBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDoKKyAgICAgICAgKHRlc3RG
dW5jdGlvbk92ZXJyaWRlcyk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVt
cEZpbGUpOgorICAgICAgICAodGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVz
dFByb2dyYW1CeXRlY29kZUNhY2hlKToKKyAgICAgICAgKHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5
bnRheEVycm9yKToKKyAgICAgICAgKHRlc3RQcm9ncmFtSlNTY3JpcHRFeGNlcHRpb24pOgorICAg
ICAgICAodGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkpOgorICAgICAgICAoK1tKU0NvbnRleHRN
ZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVu
dGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAo
dGVzdExvYWRCYXNpY0ZpbGUpOgorICAgICAgICAoK1tKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJE
ZWxlZ2F0ZSBuZXdDb250ZXh0XSk6CisgICAgICAgICgtW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFu
ZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAodGVzdEpTU2NyaXB0VVJMKToKKyAg
ICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKHRlc3RCeXRlY29kZUNhY2hlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKToKKwogMjAx
OS0wMi0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIFJlbW92ZSBXYXRjaHBvaW50U2V0IGNyZWF0aW9uIGZvciBTeW1ib2xUYWJsZSBlbnRyaWVz
IGlmIFZNOjpjYW5Vc2VKSVQoKSByZXR1cm5zIGZhbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvY29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZp
Zy5oCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBKU0NfQVBJX0FWQUlM
QUJMRSguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKSBKU19FWFBPUlQKKyNk
ZWZpbmUgSlNDX0FQSV9ERVBSRUNBVEVEKC4uLikKIC8vIFVzZSB6ZXJvIHNpbmNlIGl0IHdpbGwg
YmUgbGVzcyB0aGFuIGFueSBwb3NzaWJsZSB2ZXJzaW9uIG51bWJlci4KICNkZWZpbmUgSlNDX01B
Q19WRVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
MjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogCitPQkpDX0NMQVNTIEpTU2NyaXB0OworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2Fk
ZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNW
YWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2Fk
ZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAor
ICAgIEpTVmFsdWUgbG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9s
ZGVyJiwgSlNTY3JpcHQgKik7CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUs
ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw4ICszNCwxMCBAQAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlv
bi5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQ
cm9taXNlLmgiCiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0
ICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgog
I2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAj
aW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTQzLDcgKzQ1LDYgQEAKICNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCiAjaW1wb3J0ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2ltcG9ydCAi
U291cmNlT3JpZ2luLmgiCi0KICNpbXBvcnQgPHd0Zi9VUkwuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC03NSwxMiArNzYsMjAgQEAgSWRlbnRpZmllciBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZAogICAgIEFTU0VSVChrZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNTeW1ib2woKSk7CiAgICAg
U3RyaW5nIG5hbWUgPSAga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOwogCi0gICAgVVJMIHJlZmVycmVy
VVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZlcnJlciktPnRyeUdldFZhbHVlKCkpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlzVmFsaWQoKSk7Ci0KLSAgICBVUkwgdXJs
ID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKLSAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICBpZiAoSlNT
dHJpbmcqIHJlZmVycmVyU3RyaW5nID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZtLCByZWZl
cnJlcikpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVmZXJyZXJTdHJpbmctPnZhbHVlKGV4
ZWMpOworICAgICAgICBVUkwgcmVmZXJyZXJVUkwoeyB9LCB2YWx1ZSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVy
cmVyVVJMLmlzVmFsaWQoKSk7CisKKyAgICAgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwg
bmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9IGVsc2UgeworICAgICAgICBV
UkwgdXJsID0gVVJMKHsgfSwgbmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9
CiAKICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBV
UkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTYy
LDIwICsxNzEsNDMgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptbwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAi
Tm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlz
ZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAg
IGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSog
ZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRo
YXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIAogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBpZiAoVU5MSUtFTFkoIVtzY3JpcHQg
aXNLaW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpIHsKLSAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2YgcmVzb2x1dGlvbiBj
YWxsYmFjayBpcyBub3QgYSBKU1NjcmlwdCIpKTsKKworICAgICAgICBhdXRvIHJlamVjdFByb21p
c2UgPSBbJl0gKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVh
dGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwogICAgICAgICAgICAgY2FsbChleGVjLCBkZWZl
cnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hv
dWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRl
ZmluZWQoKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIVtzY3JpcHQgaXNL
aW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZSgiRmlyc3QgYXJndW1lbnQgb2YgcmVzb2x1dGlvbiBjYWxsYmFjayBpcyBub3QgYSBK
U1NjcmlwdCJfcyk7CisKKyAgICAgICAgSlNTY3JpcHQqIGpzU2NyaXB0ID0gc3RhdGljX2Nhc3Q8
SlNTY3JpcHQgKj4oc2NyaXB0KTsKKworICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtq
c1NjcmlwdCBqc1NvdXJjZUNvZGVdOworICAgICAgICBpZiAoVU5MSUtFTFkoW2pzU2NyaXB0IHR5
cGVdICE9IGtKU1NjcmlwdFR5cGVNb2R1bGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2UoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBwcm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0
ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxlLiJfcyk7CisKKyAgICAgICAgLy8gRklYTUU6
IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1aXJlIHNvdXJjZVVSTCwgc28g
d2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBmb3Igc3VjaCB1c2UgY2FzZXMg
dW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAgICAgICAvLyB3ZSBkbyB0aGF0
LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3VyY2VVUkw6CisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ5MDkKKyAgICAgICAg
aWYgKE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNlVVJMXSkgeworICAgICAgICAg
ICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJzb2x1dGVTdHJpbmddIH07Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG9sZE1v
ZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZShtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBk
aWZmZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQg
bm93OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFtqc1NjcmlwdCBzZXRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6c3RhdGljX2Nh
c3Q8TlNTdHJpbmcgKj4obW9kdWxlS2V5LnN0cmluZygpKV1dOworICAgICAgICAgICAgc291cmNl
ID0gW2pzU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXJncy5hcHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3Vy
Y2VDb2RlOm1vZHVsZUtleV0pOworICAgICAgICBhcmdzLmFwcGVuZChzb3VyY2UpOwogICAgICAg
ICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUo
KSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpAQCAtMjEwLDYgKzI0MiwyMiBAQCBKU09i
amVjdCogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlCiAgICAgcmV0dXJuIG1ldGFQcm9w
ZXJ0aWVzOwogfQogCitKU1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVK
U1NjcmlwdE1vZHVsZShjb25zdCBKU0xvY2tIb2xkZXImLCBKU1NjcmlwdCAqc2NyaXB0KQorewor
ICAgIEFTU0VSVChzY3JpcHQudHlwZSA9PSBrSlNTY3JpcHRUeXBlTW9kdWxlKTsKKyAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBJZGVudGlmaWVy
IGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nIHsgW1tzY3JpcHQgc291
cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21p
c2UgPSBpbXBvcnRNb2R1bGUoZXhlYywga2V5LCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8gcmVzdWx0
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCB0aGlzKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJlc3VsdC0+cmVzb2x2ZShleGVjLCBwcm9t
aXNlKTsKKyAgICByZXR1cm4gcmVzdWx0LT5wcm9taXNlKCk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEpTQ19PQkpDX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIkpTQmFzZUludGVybmFsLmgiCiAj
aW5jbHVkZSAiSlNCYXNlUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgpAQCAtNDcs
MjUgKzQ4LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0
SW50ZXJuYWwoY29uc3QgSlNMb2NrSG9sZGVyJiwgRXhlY1N0YXRlKiBleGVjLCBKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAoIWN0eCkgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIodm0pOworICAgIFVOVVNFRF9QQVJBTShjdHgpOwogCiAgICAgSlNPYmpl
Y3QqIGpzVGhpc09iamVjdCA9IHRvSlModGhpc09iamVjdCk7CiAKLSAgICBzdGFydGluZ0xpbmVO
dW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotCiAgICAgLy8gZXZhbHVh
dGUgc2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAorICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7Ci0gICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBz
b3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCk7Ci0gICAgU291cmNlQ29k
ZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNv
dXJjZVVSTFN0cmluZyB9LCBVUkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24o
T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGlu
YWxOdW1iZXIoKSkpOwotCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0
aW9uOwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBwcm9maWxlZEV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBQcm9maWxpbmdSZWFzb246OkFQSSwgc291cmNlLCBqc1RoaXNP
YmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCkBAIC04MCw3ICs3MSw3IEBAIEpTVmFsdWVS
ZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICAgICAgLy8gV2UgY291bGQgc3Rh
c2ggaXQgaW4gdGhlIGluc3BlY3RvciBpbiBjYXNlIGFuIGluc3BlY3RvciBpcyBldmVyIG9wZW5l
ZC4KICAgICAgICAgZ2xvYmFsT2JqZWN0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJ
RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAocmV0dXJu
VmFsdWUpCkBAIC05MCw2ICs4MSwyNCBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlND
b250ZXh0UmVmCiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzVW5kZWZpbmVkKCkpOwogfQogCitK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYg
c2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAo
IWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgc3Rh
cnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKworICAg
IGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6
IFN0cmluZygpOworICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0
cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNl
VVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChz
dGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKKworICAgIHJldHVybiBKU0V2
YWx1YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBjdHgsIHRoaXNPYmplY3QsIHNvdXJj
ZSwgZXhjZXB0aW9uKTsKK30KKwogYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJl
ZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKCFjdHgp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvV2ViS2l0QXZhaWxh
YmlsaXR5Lmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNMb2NrSG9sZGVyOworY2xhc3Mg
RXhlY1N0YXRlOworfQorCitleHRlcm4gIkMiIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdElu
dGVybmFsKGNvbnN0IEpTQzo6SlNMb2NrSG9sZGVyJiwgSlNDOjpFeGVjU3RhdGUqLCBKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAi
QVBJQ2FzdC5oIgogI2ltcG9ydCAiQ29tcGxldGlvbi5oIgorI2ltcG9ydCAiSlNCYXNlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkpTQ0lubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFs
LmgiCiAjaW1wb3J0ICJKU0NvbnRleHRQcml2YXRlLmgiCkBAIC0xMTIsMTAgKzExMywzOCBAQCAt
IChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopCiAKICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCiAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uVmFsdWVdOwotCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKIH0KIAorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNT
Y3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0Cit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICBpZiAoc2NyaXB0LnR5cGUgPT0ga0pTU2Ny
aXB0VHlwZVByb2dyYW0pIHsKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51
bGxwdHI7CisgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdEludGVy
bmFsKGxvY2tlciwgZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBbc2NyaXB0IGpzU291cmNlQ29k
ZV0tPnNvdXJjZUNvZGUoKSwgJmV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9iamVjdCo+KHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQor
ICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVjdGVkV2l0aFJl
YXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiQ29udGV4dCBkb2Vz
IG5vdCBzdXBwb3J0IG1vZHVsZSBsb2FkaW5nIiBpbkNvbnRleHQ6c2VsZl0gaW5Db250ZXh0OnNl
bGZdOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0
TW9kdWxlKGxvY2tlciwgc2NyaXB0KTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2Vw
dGlvbigpLT52YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246
W0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2Vs
Zl0gaW5Db250ZXh0OnNlbGZdOworICAgIH0KKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
SlNWYWx1ZVJlZjp0b1JlZih2bSwgcmVzdWx0KSBpbkNvbnRleHQ6c2VsZl07Cit9CisKIC0gKHZv
aWQpc2V0RXhjZXB0aW9uOihKU1ZhbHVlICopdmFsdWUKIHsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsMTYgQEAKIC8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0IHdpbGwgdXNl
IHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdhdGUgd2lsbCBi
ZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdlYlZpZXcuICovCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+IG1vZHVsZUxv
YWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhK
U0NfSU9TX1RCQSkpOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJ1biBhIEpTU2NyaXB0
LgorIEBwYXJhbSBzY3JpcHQgdGhlIEpTU2NyaXB0IHRvIGV2YWx1YXRlLgorIEBkaXNjdXNzaW9u
IElmIHRoZSBwcm92aWRlZCBKU1NjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIGtKU1NjcmlwdFR5cGVQ
cm9ncmFtLCB0aGUgc2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUg
cmVzdWx0IG9mIGV2YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNy
ZWF0ZWQgd2l0aCBrSlNTY3JpcHRUeXBlTW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgcnVuIGFz
eW5jaHJvbm91c2x5IGFuZCB3aWxsIHJldHVybiBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUg
bW9kdWxlIGFuZCBhbnkgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZC4gVGhlIG1v
ZHVsZSBsb2FkZXIgd2lsbCB0cmVhdCB0aGUgc2NyaXB0IGFzIGlmIGl0IGhhZCBiZWVuIHJldHVy
bmVkIGZyb20gYSBkZWxlZ2F0ZSBjYWxsIHRvIG1vZHVsZUxvYWRlckRlbGVnYXRlLiBUaGlzIG1p
cnJvcnMgdGhlIEphdmFTY3JpcHQgZHluYW1pYyBpbXBvcnQgb3BlcmF0aW9uLgorICovCistIChK
U1ZhbHVlICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQ7CisKIEBlbmQKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCShyZXZpc2lvbiAy
NDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDM3ICszMSw4NCBAQCBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiBAY2xh
c3MgSlNWaXJ0dWFsTWFjaGluZTsKIAorLyohCisgQGVudW0gSlNTY3JpcHRUeXBlCisgQGFic3Ry
YWN0ICAgICBBIGNvbnN0YW50IGlkZW50aWZ5aW5nIHRoZSBleGVjdXRpb24gdHlwZSBvZiBhIEpT
U2NyaXB0LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZVByb2dyYW0gIFRoZSB0eXBlIG9m
IGEgbm9ybWFsIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyBAY29uc3RhbnQgICAgIGtKU1NjcmlwdFR5
cGVNb2R1bGUgICBUaGUgdHlwZSBvZiBhIG1vZHVsZSBKYXZhU2NyaXB0IHByb2dyYW0uCisgKi8K
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEpTU2NyaXB0VHlwZSkgeworICAgIGtKU1Njcmlw
dFR5cGVQcm9ncmFtLAorICAgIGtKU1NjcmlwdFR5cGVNb2R1bGUsCit9OworCisKIEpTQ19DTEFT
U19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKIEBpbnRl
cmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAogCiAvKiEKKyBUaGlzIFNQSSBpcyBkZXByZWNhdGVk
IGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAic2NyaXB0T2ZUeXBlOndpdGhTb3VyY2U6YW5k
U291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjoiIGluc3Rl
YWQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0
cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gSlND
X0FQSV9ERVBSRUNBVEVEKCJVc2UgK3NjcmlwdE9mVHlwZTp3aXRoU291cmNlOmFuZFNvdXJjZVVS
TDphbmRCeXRlY29kZUNhY2hlOmluVmlydHVhbE1hY2hpbmU6ZXJyb3I6IGluc3RlYWQuIiwgbWFj
b3N4KEpTQ19NQUNfVEJBLCBKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSwgSlNDX0lPU19U
QkEpKTsKKworLyohCisgVGhpcyBTUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1
c2VkLiBVc2UgInNjcmlwdE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhTb3Vy
Y2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5lOmVycm9yOiIgaW5zdGVhZC4K
KyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKCJVc2Ug
K3NjcmlwdE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5k
Qnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5lOmVycm9yOiBpbnN0ZWFkLiIsIG1hY29zeChK
U0NfTUFDX1RCQSwgSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEsIEpTQ19JT1NfVEJBKSk7
CisKKy8qIQorIFRoaXMgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4K
KyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwg
KilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENv
ZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNh
Y2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RFUFJFQ0FURUQoIkRvIG5v
dCB1c2UgdGhpcy4gVXNlICtzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjogb3Ig
K3NjcmlwdE9mVHlwZTp3aXRoU291cmNlOmFuZFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmlu
VmlydHVhbE1hY2hpbmU6ZXJyb3I6IGluc3RlYWQiLCBtYWNvc3goSlNDX01BQ19UQkEsIEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBLCBKU0NfSU9TX1RCQSkpOworCisvKiEKICBAbWV0aG9k
CiAgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwg
bWFjaGluZS4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBA
cGFyYW0gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2
YWx1YXRlZCBieSB0aGUgSlMgdm0uCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0
byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1v
ZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUg
cGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLiBPbiBj
cmVhdGlvbiwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRoZSBjYWNoZWQgYnl0ZWNvZGUgb2Zm
IGRpc2suIElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhpcyBsb2NhdGlvbiBpcyBzdGFsZSwg
eW91IHNob3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBjYWxsaW5nIHRoaXMgY29uc3RydWN0
b3IuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2
YWx1YXRlZCBpbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlw
dCBjb3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRo
ZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlIGF0IGNhY2hlUGF0aCBzaG91bGQg
bm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgZm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uCiAgKi8K
LSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisrIChudWxsYWJs
ZSBpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSB3aXRoU291cmNl
OihOU1N0cmluZyAqKXNvdXJjZSBhbmRTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBf
TnVsbGFibGUpZXJyb3I7CiAKIC8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNT
Y3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEg
Y29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIHR5cGUgVGhlIHR5cGUg
b2YgSmF2YVNjcmlwdCBzb3VyY2UuCiAgQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcg
dGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJj
ZVVSTCBUaGUgc291cmNlIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1v
ZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGgg
QSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBm
dXR1cmUgZXhlY3V0aW9uLiBPbiBjcmVhdGlvbiwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRo
ZSBjYWNoZWQgYnl0ZWNvZGUgb2ZmIGRpc2suIElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhp
cyBsb2NhdGlvbiBpcyBzdGFsZSwgeW91IHNob3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBj
YWxsaW5nIHRoaXMgY29uc3RydWN0b3IuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5l
IHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KLSBAcGFyYW0gY29kZVNpZ25pbmdQYXRo
IEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZp
bGVQYXRoIG9uIGRpc2suCi0gQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBw
YXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHBh
cmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNy
ZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCiAgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KLSBA
ZGlzY3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5kIGNh
Y2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlmZWN5
Y2xlIG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJlIG5v
dCB1c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0dXJl
LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNob3Vs
ZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gVGhp
cyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KIAogIElm
IHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVy
biBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxl
OihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJv
bUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJj
ZVVSTCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBpblZpcnR1
YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gZXJyb3I6KG91dCBOU0Vycm9yICogX051
bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENh
Y2hlIHRoZSBieXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCB0byBkaXNrIGF0IHRoZSBwYXRoIHBh
c3NlZCBpbiBkdXJpbmcgY3JlYXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Yg
d2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNhY2hlZCBpZiB0aGUgcmVzdWx0IGlzIEZBTFNF
LgorICovCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICogX051
bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJl
dHVybnMgdGhlIEpTU2NyaXB0VHlwZSBvZiB0aGlzIEpTU2NyaXB0LgorICovCistIChKU1Njcmlw
dFR5cGUpdHlwZTsKIAogLyohCi0gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFsZW50
IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6
YW5kQnl0ZWNvZGVDYWNoZTouCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBzb3Vy
Y2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsK
Ky0gKE5TVVJMICopc291cmNlVVJMOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAj
aW1wb3J0ICJQYXJzZXJFcnJvci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNWaXJ0
dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBlOwor
ICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0cmlu
ZyBtX3NvdXJjZTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJldGFp
blB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2NhY2hl
ZEJ5dGVjb2RlOwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291cmNl
Q29kZTsKQEAgLTUzLDYgKzU3LDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6
KE5TU3RyaQogICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVzdWx0
LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRU
eXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTkwLDEyICs5NSwxMyBAQCBz
dGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlCiAKICsgKGluc3RhbmNldHlw
ZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25p
bmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShjb2Rl
U2lnbmluZ1BhdGgpOworICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworCiAgICAgVVJMIGZp
bGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhVUkwu
aXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0
IGludG8gZGlydHkgbWVtb3J5LgorCiAgICAgVmVjdG9yPExDaGFyPiBidWZmZXI7CiAgICAgaWYg
KCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xMDYsOCArMTEyLDcgQEAgKyAo
aW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVQogICAgIEpTU2NyaXB0ICpyZXN1
bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+
bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwot
ICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Ci0gICAgW3Jlc3VsdCByZWFkQ2Fj
aGVdOworICAgIHJlc3VsdC0+bV90eXBlID0ga0pTU2NyaXB0VHlwZU1vZHVsZTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0xMTYsNiArMTIxLDUzIEBAICsgKGluc3RhbmNldHlwZSlzY3Jp
cHRGcm9tVVRGOEZpbGU6KE5TVVIKICAgICByZXR1cm4gW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJ
SUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29kZVNpZ25pbmc6Y29kZVNp
Z25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0KIAorc3RhdGljIEpTU2Ny
aXB0ICpjcmVhdGVFcnJvcihOU1N0cmluZyAqbWVzc2FnZSwgTlNFcnJvcioqIGVycm9yKQorewor
ICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OkAiSlNTY3JpcHRFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZvOkB7IEAibWVzc2FnZSI6IG1l
c3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9m
VHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5k
U291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNh
Y2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gZXJyb3I6KG91
dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBKU1Nj
cmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5
cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fc291cmNl
VVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Cisg
ICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGluc3Rh
bmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VV
UkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgoreworICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNv
bHV0ZVVSTF0pOworICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBwYXRo
ICVAIGlzIG5vdCBhIGxvY2FsIGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxlUGF0
aFVSTCldLCBlcnJvcik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJpbmcg
c3lzdGVtUGF0aCA9IGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEgZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNf
Y2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hhcmFj
dGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5k
YXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAl
QCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJv
cik7CisKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJ
bXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxl
RGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVkU291
cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJj
ZVVSTDsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQg
cmVhZENhY2hlXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsK
ICAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUub3du
ZWQoKSkKQEAgLTE1MiwyMiArMjA0LDI2IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9jYWNo
ZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0KIAot
LSAodm9pZCl3cml0ZUNhY2hlCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJy
b3IgKiopZXJyb3IKIHsKLSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1fY2Fj
aGVQYXRoKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIGVycm9yU3RyaW5nIHsgfTsKKyAg
ICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAoIWVycm9yU3RyaW5nLmlz
TnVsbCgpKSB7CisgICAgICAgIGNyZWF0ZUVycm9yKGVycm9yU3RyaW5nLCBlcnJvcik7CisgICAg
ICAgIHJldHVybiBOTzsKKyAgICB9CiAKLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwotICAg
IG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFs
TWFjaGluZS52bSwgbV9qc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAgIGlm
IChlcnJvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVuKFtt
X2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwot
ICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2NrKGZk
LCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQsIG1f
Y2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgY2xv
c2UoZmQpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopc291cmNlVVJMCit7Cisg
ICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1NjcmlwdFR5cGUpdHlwZQor
eworICAgIHJldHVybiBtX3R5cGU7CiB9CiAKIEBlbmQKQEAgLTE4OSwyNCArMjQ1LDc1IEBAIC0g
KGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1fY2Fj
aGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VSVCht
b2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNvZGUp
CiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKworICAgIHJldHVybiBbc2Vs
ZiBmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlXTsKK30KKworLSAoQk9PTCl3cml0ZUNhY2hlOihT
dHJpbmcmKWVycm9yCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gWUVTOworCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBlcnJvciA9
ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMg
SlNTY3JpcHQuIl9zOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQYXJz
ZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Uga0pT
U2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJh
dGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVd
LT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBr
SlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5z
b3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0g
eyB9OworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRl
Y29kZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yOiAiLCBwYXJz
ZXJFcnJvci5tZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaW50
IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JP
TkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3Ry
aW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmlu
ZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBO
TzsKICAgICB9CisgICAgaW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tf
TkIpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9j
ayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiJfczsKKyAgICBlbHNl
CisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRl
Y29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7Cit9
CisKKy0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIG1fc291cmNlVVJM
ID0gdXJsOworfQogCistIChKU0M6OkpTU291cmNlQ29kZSopZm9yY2VSZWNyZWF0ZUpTU291cmNl
Q29kZQorewogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24geyB9OwotICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9
IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdpbiht
b2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9z
aXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAgICBT
dHJpbmcgdXJsID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH07
CisgICAgYXV0byB0eXBlID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6OlNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNvdXJj
ZVR5cGU6OlByb2dyYW07CisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNl
T3JpZ2luKHVybCksIFVSTCh7IH0sIHVybCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAgIEpT
Qzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBv
c2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJh
c2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpT
U291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291
cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAg
ICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAogQGVuZAogCi0KICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0
MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVuc2ln
bmVkKWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlNDOjpD
YWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxhYmxl
IGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpKU1Nv
dXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJl
cXVpcmUgc291cmNlVVJMIHVwb24gY3JlYXRpb246IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTQ5MDkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3JlYXRl
SlNTb3VyY2VDb2RlOworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOworLSAodm9p
ZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVz
dC5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBpbnQgdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCkKIAogICAgIGNvbnN0IGNoYXIqIG9sZEZ1
bmN0aW9uT3ZlcnJpZGVzID0gT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlkZXMoKTsKICAgICAKLSAg
ICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gInRlc3RhcGktZnVuY3Rpb24tb3ZlcnJp
ZGVzLmpzIjsKKyAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gIi4vdGVzdGFwaVNj
cmlwdHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOwogICAgIEpTQzo6RnVuY3Rpb25P
dmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWRlcygpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKG51bGxwdHIsIG51bGxwdHIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRl
cy5tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RJbmNsdWRlcy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIC8vIFNp
bmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aHJvdWdoIHRoZSByZXdy
aXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3JpdHRlbiB2YWx1ZXMuLi4KICNkZWZp
bmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4u
KQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX01BQ19WRVJT
SU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxMSArNDAsMTggQEAKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNpbmNs
dWRlICJKU1N0cmluZ1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJKU1dlYWtQcml2YXRlLmgiCisj
aWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxs
aW1pdHMuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaWYg
IU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTY3LDcgKzc0LDcgQEAKICNlbmRp
ZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9p
ZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQg
dGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODcsMTkg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7
CiAjZW5kaWYKIAotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVjdGl2ZUNB
UEkoKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBjaGFyIHJlc29sdmVkUGF0aFtQQVRIX01BWF07
CisgICAgcmVhbHBhdGgoYXJndlswXSwgcmVzb2x2ZWRQYXRoKTsgCisgICAgY2hhciogbmV3Q1dE
ID0gZGlybmFtZShyZXNvbHZlZFBhdGgpOworICAgIGlmIChjaGRpcihuZXdDV0QpKQorICAgICAg
ICBmcHJpbnRmKHN0ZG91dCwgIkNvdWxkIG5vdCBjaGRpciB0bzogJXNcbiIsIG5ld0NXRCk7CiAj
ZW5kaWYKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5V
TEw7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSShmaWx0
ZXIpOworI2VuZGlmCisKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmlsdGVy
KSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTc5LDcgKzE5OTQs
NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTT2JqZWN0TWFrZUNv
bnN0cnVjdG9yKGNvbnRleHQsIG51bGxDbGFzcywgMCk7CiAgICAgSlNDbGFzc1JlbGVhc2UobnVs
bENsYXNzKTsKIAotICAgIGNvbnN0IGNoYXIqIHNjcmlwdFBhdGggPSAidGVzdGFwaS5qcyI7Cisg
ICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICIuL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMi
OwogICAgIGNoYXIqIHNjcmlwdFVURjggPSBjcmVhdGVTdHJpbmdXaXRoQ29udGVudHNPZkZpbGUo
c2NyaXB0UGF0aCk7CiAgICAgaWYgKCFzY3JpcHRVVEY4KSB7CiAgICAgICAgIHByaW50ZigiRkFJ
TDogVGVzdCBzY3JpcHQgY291bGQgbm90IGJlIGxvYWRlZC5cbiIpOwpAQCAtMjA4MiwxMyArMjA5
NywxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICB9CiAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAgICAgfQotICAgIGZhaWxlZCA9
IHRlc3RUeXBlZEFycmF5Q0FQSSgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0RXhlY3V0
aW9uVGltZUxpbWl0KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RGdW5jdGlvbk92ZXJy
aWRlcygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXIoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxv
dygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0SlNPTlBhcnNlKCkgfHwgZmFpbGVkOwot
ICAgIGZhaWxlZCA9IHRlc3RKU09iamVjdEdldFByb3h5VGFyZ2V0KCkgfHwgZmFpbGVkOworICAg
IGZhaWxlZCB8PSB0ZXN0VHlwZWRBcnJheUNBUEkoKTsKKyAgICBmYWlsZWQgfD0gdGVzdEV4ZWN1
dGlvblRpbWVMaW1pdCgpOworICAgIGZhaWxlZCB8PSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKTsK
KyAgICBmYWlsZWQgfD0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCk7CisgICAgZmFp
bGVkIHw9IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3coKTsKKyAgICBmYWlsZWQgfD0gdGVzdEpT
T05QYXJzZSgpOworICAgIGZhaWxlZCB8PSB0ZXN0SlNPYmplY3RHZXRQcm94eVRhcmdldCgpOwog
CiAgICAgLy8gQ2xlYXIgb3V0IGxvY2FsIHZhcmlhYmxlcyBwb2ludGluZyBhdCBKU09iamVjdFJl
ZnMgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGNvbGxlY3RlZAogICAgIGZ1bmN0aW9uID0g
TlVMTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0J
KHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbXBvcnQgIlJlZ3Jl
c3MxNDEyNzUuaCIKICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2lmIF9faGFzX2luY2x1
ZGUoPGxpYnByb2MuaD4pCisjZGVmaW5lIEhBU19MSUJQUk9DIDEKKyNpbXBvcnQgPGxpYnByb2Mu
aD4KKyNlbHNlCisjZGVmaW5lIEhBU19MSUJQUk9DIDAKKyNlbmRpZgogI2ltcG9ydCA8cHRocmVh
ZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5oPgpA
QCAtNTQsNyArNjAsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUoaWQp
CiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsKIAogZXh0ZXJu
IGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7Citl
eHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogZXh0ZXJuICJD
IiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKQEAgLTE5ODAsMjIgKzE5ODYsMzAgQEAgc3RhdGljIHZvaWQgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkK
K3N0YXRpYyBOU1VSTCAqdGVtcEZpbGUoTlNTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VSTCog
dGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJlY3Rv
cnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgIHJldHVybiBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6c3RyaW5nXTsKK30KKworc3RhdGljIHZvaWQgdGVzdE1vZHVs
ZUJ5dGVjb2RlQ2FjaGUoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU1VS
TCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0g
QCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5qcyc7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsK
KyAgICAgICAgTlNTdHJpbmcgKmJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gJy4uL2Zv
by5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyAqYmF6
U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tICcuLi9kaXJlY3RvcnkvYmFyLmpzJzsgZ2xv
YmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAKLSAgICAgICAg
TlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsg
ZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImlt
cG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7Ci0g
ICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9k
aXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAg
PSBmb287IjsKKyAgICAgICAgTlNVUkwgKmZvb1BhdGggPSB0ZW1wRmlsZShAImZvby5qcyIpOwor
ICAgICAgICBOU1VSTCAqYmFyUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzIik7CisgICAgICAgIE5T
VVJMICpiYXpQYXRoID0gdGVtcEZpbGUoQCJiYXouanMiKTsKIAotICAgICAgICBOU1VSTCogZm9v
UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5q
cyJdOwotICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwotICAgICAgICBOU1VSTCogYmF6UGF0aCA9IFt0
ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhei5qcyJdOworICAg
ICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28uanMuY2FjaGUiKTsKKyAg
ICAgICAgTlNVUkwgKmJhckNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzLmNhY2hlIik7Cisg
ICAgICAgIE5TVVJMICpiYXpDYWNoZVBhdGggPSB0ZW1wRmlsZShAImJhei5qcy5jYWNoZSIpOwog
Ci0gICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKLSAgICAgICAgTlNVUkwqIGJhckNh
Y2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJh
ci5qcy5jYWNoZSJdOwotICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRoID0gW3RlbXBEaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNhY2hlIl07CisgICAgICAg
IE5TVVJMICpmb29GYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vLmpzIl07
CisgICAgICAgIE5TVVJMICpiYXJGYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIv
ZGlyZWN0b3J5L2Jhci5qcyJdOworICAgICAgICBOU1VSTCAqYmF6RmFrZVBhdGggPSBbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOkAiL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdOwogCiAgICAgICAgIFtm
b29Tb3VyY2Ugd3JpdGVUb1VSTDpmb29QYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJ
SVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIFtiYXJTb3VyY2Ugd3JpdGVUb1VS
TDpiYXJQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nIGVy
cm9yOm5pbF07CkBAIC0yMDAzLDEzICsyMDE3LDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRlY29k
ZUNhY2hlKCkKIAogICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQgKmNvbnRleHQsIEpT
VmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVjdCkgewog
ICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9y
eS9iYXIuanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGluZTpj
b250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNo
ZTpmb29DYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmFyUGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5n
Om5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3Rvcnkv
YmF6LmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtb
SlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29u
dGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6
YmF6Q2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSlNTY3JpcHQg
KnNjcmlwdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmpl
Y3Q6W2Zvb0Zha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAgICAgICAgICAgICAgc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6Zm9vUGF0aCB3aXRoU291cmNlVVJMOmZvb0Zha2VQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZSBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVh
bFRvT2JqZWN0OltiYXJGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQorICAgICAgICAgICAgICAg
IHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1v
cnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhclBhdGggd2l0aFNvdXJjZVVSTDpiYXJGYWtlUGF0aCBh
bmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmly
dHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpbYmF6RmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAg
ICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXpQYXRoIHdpdGhTb3VyY2VVUkw6YmF6RmFr
ZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250
ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisKKyAgICAgICAgICAgIGlmIChzY3JpcHQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpu
aWxdKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIFtyZXNv
bHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1d
OwogICAgICAgICB9OwogCkBAIC0yMDIzLDEyICsyMDQzLDc1IEBAIHN0YXRpYyB2b2lkIHRlc3RC
eXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVN
YW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAgICBbZmlsZU1h
bmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxl
TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAgICAg
ICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOwot
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpu
aWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICByZW1vdmVkQWxs
ICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOworICAg
ICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBl
cnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJl
bW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJy
b3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3VsdChAIlJlbW92
ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgdGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkgeyBy
ZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28oKSArIGJhcigp
OyI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5jYWNo
ZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtK
U1NjcmlwdFR5cGVQcm9ncmFtIHdpdGhTb3VyY2U6Zm9vU291cmNlIGFuZFNvdXJjZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAIm15LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgaWYgKCFbc2NyaXB0IGNhY2hl
Qnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAg
SlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChbcmVzdWx0IGlzTnVt
YmVyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0IG9mIGNhY2hlZCBwcm9ncmFtIGlz
IDQwKzQyIiwgW1tyZXN1bHQgdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0MCArIDQyKTsKKyAgICAg
ICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisKKyAgICAgICAgTlNG
aWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6
Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUmVtb3ZlZCBh
bGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihKU1NjcmlwdFR5cGUgdHlwZSkK
K3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9
IEAidGhpcyBpcyBhIHN5bnRheCBlcnJvciI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGgg
PSB0ZW1wRmlsZShAImZvby5qcy5jYWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBb
SlNTY3JpcHQgc2NyaXB0T2ZUeXBlOnR5cGUgd2l0aFNvdXJjZTpmb29Tb3VyY2UgYW5kU291cmNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9v
Q2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpu
aWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBOU0Vycm9yICpl
cnJvciA9IG5pbDsKKyAgICAgICAgaWYgKFtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjom
ZXJyb3JdKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXJy
b3IpOworICAgICAgICBjaGVja1Jlc3VsdChAIkdvdCBlcnJvciB3aGVuIHRyeWluZyB0byBjYWNo
ZSBieXRlY29kZSBmb3IgYSBzY3JpcHQgd2l0aCBhIHN5bnRheCBlcnJvci4iLCBbW2Vycm9yIGRl
c2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRlY29kZSBm
b3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yIl0pOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQyOyI7
CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
KyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpzb3VyY2UgYW5kU291cmNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGluVmlydHVhbE1hY2hp
bmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChzY3JpcHQpOworICAgICAgICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9IGZh
bHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqLCBK
U1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0cnVl
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOworICAg
ICAgICAgICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNo
b3VsZCBoYXZlIHRoZSBleGNlcHRpb24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9OdW1i
ZXJdIGludFZhbHVlXSA9PSA0Mik7CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQg
d2l0aCBleGNlcHRpb24gc2hvdWxkIHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1VuZGVm
aW5lZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNl
cHRpb24gc2hvdWxkIGNhbGwgZXhjZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlvbik7
CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIxNjEsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0Zp
bGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVM
b2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksMzQgKzIxNzIsMTcyIEBAIHN0YXRp
YyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRl
IDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUp
bmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFw
cGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAorewor
ICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilp
ZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0
SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpmaWxlUGF0aCBhbmRCeXRlY29k
ZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6
bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3Jl
YXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZv
aWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90IGNv
dW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOwor
I2VuZGlmCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBb
SlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAg
IGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVl
ICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMuanMn
KTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTVmFs
dWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworI2lm
IEhBU19MSUJQUk9DCisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZvKGdl
dHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBjaGVja1Jlc3VsdChA
IkpTU2NyaXB0IHNob3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIsIGNvdW50ID09IGFm
dGVyQ291bnQpOworI2VuZGlmCisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBw
cm9taXNlLCBudWxsKTsKKyAgICB9CisjaWYgSEFTX0xJQlBST0MKKyAgICBzaXplX3QgYWZ0ZXIg
PSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAg
Y2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRl
ciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09IGFmdGVyKTsKKyNlbmRpZgorfQorCitA
aW50ZXJmYWNlIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxK
U01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUg
eworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9
IFtbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBm
ZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZl
SGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJl
amVjdAoreworICAgIFVOVVNFRF9QQVJBTShyZWplY3QpOworCisgICAgTlNVUkwgKmZpbGVQYXRo
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBOU1N0
cmluZyAqcGF0aFN0cmluZyA9IFtmaWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107CisgICAgaWYgKFtw
YXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0aFN0cmluZyBjb250
YWluc1N0cmluZzpAImZvby5qcyJdKSB7CisgICAgICAgIGF1dG8gKnNjcmlwdCA9IFtKU1Njcmlw
dCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlG
aWxlOmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwg
aW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJn
dW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoW3Bh
dGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXIuanMiXSkgeworICAgICAgICBhdXRvICpzY3Jp
cHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgd2l0aFNvdXJj
ZTpAIiIgYW5kU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvbm90L3BhdGgvdG8v
YmFyLmpzIl0gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7
CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVs
ZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAqYmFzaWMgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07
CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNT
Y3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFzaWMgd2l0aFNvdXJj
ZVVSTDpiYXNpYyBhbmRCeXRlY29kZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQu
dmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQxID0g
W2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQxXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBOU1VS
TCAqZm9vID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVsYXRpdmVUb1VSTDpy
ZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBbSlNT
Y3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTpmb28gd2l0aFNvdXJjZVVSTDpmb28gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmlwdDIpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQyID0gW2NvbnRl
eHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQyXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgd2Fz
UmVqZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0Y2gi
IHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2FzUmVq
ZWN0ZWQgPSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtb
cmVhc29uIHRvU3RyaW5nXSBjb250YWluc1N0cmluZzpAIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBw
cm92aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycyJdKTsKKyAgICAgICAgfV1dOwor
CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGggZGlm
ZmVyZW50IGlkZW50aWZpZXJzIGlzIHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0KK30K
KworI2RlZmluZSBSVU4odGVzdCkgZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0
KSkgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwgI3Rl
c3QpOyBcCisgICAgICAgIHRlc3Q7IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIsICN0
ZXN0KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNv
bnN0IGNoYXIqIGZpbHRlcikKIHsKICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJ
Iik7CiAKLSAgICBjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVhZExp
bWl0VGVzdHMoKTsKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdCkg
LT4gYm9vbCB7CisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3RyY2Fz
ZXN0cih0ZXN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAg
UlVOKGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRMaW1p
dFRlc3RzKCkpOworCisgICAgUlVOKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJM
KCkpOworICAgIFJVTih0ZXN0RmV0Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29DeWNs
ZSgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RJ
bXBvcnRNb2R1bGVUd2ljZSgpKTsKKyAgICBSVU4odGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUoKSk7
CisgICAgUlVOKHRlc3RQcm9ncmFtQnl0ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdEJ5dGVj
b2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZVByb2dyYW0pKTsKKyAgICBSVU4o
dGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZU1vZHVsZSkpOwor
ICAgIFJVTih0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkpOwogCi0gICAgdGVzdExvYWRl
clJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAgICB0ZXN0
RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOwotICAg
IHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7CisgICAg
UlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0TG9hZGVy
UmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRV
UkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVOKHRlc3RK
U1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2FkQmFzaWNG
aWxlKCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJVTih0
ZXN0TG9hZEJhc2ljRmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlv
bjo6UmVzb2x2ZUVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
amVjdEVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVM
YXRlKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUpOwot
ICAgIHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlc29s
dmVkKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFyYWxsZWxQcm9taXNl
UmVzb2x2ZVRlc3QoKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZXNvbHZlRWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZWplY3RFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
c29sdmVMYXRlKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVq
ZWN0TGF0ZSkpOworICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpKTsKKyAgICBS
VU4ocHJvbWlzZUNyZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVqZWN0
ZWQoKSk7CisgICAgUlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkpOwogCiAgICAgdGVz
dE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Zvby5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCAiLi9iYXIuanMiOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC04ODQsNiArODg0LDcgQEAKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5
cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMwNjEx
RjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50
aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5
QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk1MkQxMzA5MTIyMUNFMTc2MDA5QzgzNkMgLyogZm9vLmpzIGluIENv
cHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4
QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNFNzhCMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzBBNjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0ubW0g
Ki87IH07CkBAIC0xMTYwLDYgKzExNjEsNyBAQAogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVk
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5
ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Njk0M0ExRjhDMEFDODAwOTIzMkFF
IC8qIFN0cnVjdHVyZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg3MkM0
NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzk4OTM3Nzkx
RENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4
ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYw
MDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1h
cEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDI5LDYgKzIwMzEsNyBAQAogCQkJ
ZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJ
ZmlsZXMgPSAoCisJCQkJNTJEMTMwOTEyMjFDRTE3NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBDb3B5
IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBiYXNp
Yy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEwMDZG
MjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQgU2Ny
aXB0ICovLAogCQkJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGluIENv
cHkgU3VwcG9ydCBTY3JpcHQgKi8sCkBAIC0zMzc3LDYgKzMzODAsNyBAQAogCQk1MkMwNjExRDFB
QTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJD
OTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBl
UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQxMzA4RjIyMUNF
MDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFF
QjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEE2MzQwMUZBM0UzMUMwMDI2
QTU0NSAvKiBTb3VyY2VzQ29jb2EudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNvdXJjZXND
b2NvYS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzcyLDYgKzM3NzYsNyBA
QAogCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0
dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3RydWN0
dXJlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3Ry
dWN0dXJlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUlu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZC
IC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zp
eGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk5NSw2ICs2MDAwLDcgQEAKIAkJCQlDMkNG
MzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lm1tICovLAogCQkJCTE0
MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLAogCQkJCTE0MjcxMTM4MEE0
NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLywKKwkJCQk3OTg3MkM0NzIyMUJCQUVEMDA4QzY5
NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLywKIAkJCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0Qg
LyogSlNCYXNlUHJpdmF0ZS5oICovLAogCQkJCTE0NDBGOEFEMEE1MDhEMjAwMDA1RjA2MSAvKiBK
U0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTE0NDBGOEFDMEE1MDhEMjAwMDA1RjA2
MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCAqLywKQEAgLTYzNDAsNiArNjM0Niw3IEBACiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUzQzNENUU0MjFFQ0U2Q0Uw
MDg3RkRGQyAvKiBiYXNpYy5qcyAqLywKKwkJCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyog
Zm9vLmpzICovLAogCQkJKTsKIAkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKIAkJCXBhdGggPSBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CkBAIC05NzU4LDYgKzk3NjUsNyBAQAogCQkJCTBGRjQy
NzQ4MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdDIC8q
IFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNDE4Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0ZWNv
ZGUoVk0mIHZtLCAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0gRXZhbENv
bnRleHRUeXBlOjpOb25lOwogCiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJN
b2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIGlm
ICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIHNl
cmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VDb2Rl
VHlwZTo6UHJvZ3JhbVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7
CiB9CiAKQEAgLTExOCw2ICsxMjAsOCBAQCBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVsZUJ5
dGVjb2RlKFZNCiAgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250
ZXh0VHlwZTo6Tm9uZTsKIAogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
ayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVn
Z2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAg
ICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVy
biBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291cmNl
Q29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9k
ZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362663</attachid>
            <date>2019-02-21 16:22:23 -0800</date>
            <delta_ts>2019-02-21 20:21:59 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>66211</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxODc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE5LTAyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBKU1NjcmlwdCBTUEkgYmFzZWQgb24gZmVlZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDUxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIEpTU2Ny
aXB0IFNQSSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CisgICAgICAgIC0gSlNTY3JpcHQgY2FuIG5v
dyByZXByZXNlbnQgYm90aCBtb2R1bGVzIGFuZCBwcm9ncmFtcy4gVGhpcyBpcyBhIHByb3BlcnR5
CisgICAgICAgIG9mIHRoZSBzY3JpcHQgZGV0ZXJtaW5lZCBkdXJpbmcgY3JlYXRpb24uCisgICAg
ICAgIC0gSlNTY3JpcHQgbm93IHRha2VzIGEgc291cmNlVVJMIGR1cmluZyBjb25zdHJ1Y3Rpb24u
IEZvciBtb2R1bGVzLCB0aGlzIGFjdHMKKyAgICAgICAgYXMgdGhlIG1vZHVsZSBpZGVudGlmaWVy
LgorICAgICAgICAtIEpTU2NyaXB0IG5vdyBoYXMgU1BJIGZvciB3cml0aW5nIHRoZSBjYWNoZSBv
dXQgdG8gZGlzay4gV2UgZG9uJ3QgZG8gdGhpcworICAgICAgICBhdXRvbWF0aWNhbGx5LgorICAg
ICAgICAtIEpTU2NyaXB0IHdpbGwgbG9hZCB0aGUgYnl0ZWNvZGUgY2FjaGUgb24gY3JlYXRpb24g
aWYgaXQgZXhpc3RzLgorICAgICAgICAtIFdlIHJldHJvZml0IHRoZXNlIG5ldyByZXF1aXJlbWVu
dHMgb24gdGhlIHByaW9yIEpTU2NyaXB0IFNQSSB0aGF0CisgICAgICAgIHdlJ3JlIGdvaW5nIHRv
IHJlbW92ZSBhcyBzb29uIGFzIHdlIGNhbjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NDkwOS4KKyAgICAgICAgUHJldmlvdXMgU1BJIGFzc3VtZXMgYWxsIEpTU2Ny
aXB0cyBhcmUgbW9kdWxlcy4gUHJldmlvdXMgU1BJIGFsc28gYXNzaWducworICAgICAgICBhIHNv
dXJjZVVSTCB0byB0aGUgSlNTY3JpcHQgYmFzZWQgb24gd2hhdCB0aGUgbW9kdWxlIGxvYWRlciBk
ZWNpZGVkIHRoZQorICAgICAgICBpZGVudGlmaWVyIHNob3VsZCBiZS4gV2UnbGwgcmVtb3ZlIHRo
aXMgb25jZSB3ZSByZW1vdmUgdGhlIG9sZCBTUEkuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gYWRkcyBTUEkgdG8gSlNDb250ZXh0IHRvIGV2YWx1YXRlIGEgSlNTY3JpcHQuIEZv
ciBtb2R1bGVzLAorICAgICAgICB0aGlzIGlzIGxpa2UgcmV0dXJuaW5nIHRoZSByZXN1bHQgb2Yg
ZG9pbmcgZHluYW1pYyBpbXBvcnQuIEZvciBwcm9ncmFtcywKKyAgICAgICAgdGhpcyBkb2VzIG5v
cm1hbCBwcm9ncmFtIGV2YWx1YXRpb24uCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFs
c28gZml4ZXMgYSBidWcgaW4gZ2VuZXJhdGVCeXRlY29kZS9nZW5lcmF0ZU1vZHVsZUJ5dGVjb2Rl
IHdoZXJlCisgICAgICAgIHdlIHdvdWxkIHRyeSB0byBjYWNoZSB0aGUgYnl0ZWNvZGUgZXZlbiBp
ZiByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2sKKyAgICAgICAgcmV0dXJuZWQg
bnVsbC4gRS5nLCBpZiB0aGUgc2NyaXB0IGhhZCBhIHN5bnRheCBlcnJvci4KKyAgICAgICAgCisg
ICAgICAgIFdoZW4gd3JpdGluZyB0ZXN0cywgSSBhbHNvIGRpc2NvdmVyZWQgdGhhdCBzb21lb25l
IHByZXZpb3VzbHkgYnJva2UKKyAgICAgICAgdGVzdGFwaS4gVGhpcyBwYXRjaCBhbHNvIGZpeGVz
IHRob3NlIGZhaWx1cmVzLiBUaGV5IHdlcmUgYnJva2VuIHdoZW4KKyAgICAgICAgd2Ugc3dpdGNo
ZWQgdG8gdXNpbmcgYSB0ZXN0YXBpU2NyaXB0cyBkaXJlY3RvcnkgdG8gaG9sZCBvdXIgdGVzdCAu
anMKKyAgICAgICAgc2NyaXB0cy4gCisKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpT
QVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNBUElH
bG9iYWxPYmplY3Q6OmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKToKKyAgICAgICAgKiBB
UEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbCk6CisgICAg
ICAgIChKU0V2YWx1YXRlU2NyaXB0KToKKyAgICAgICAgKiBBUEkvSlNCYXNlSW50ZXJuYWwuaDog
QWRkZWQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlNDb250ZXh0
IGV2YWx1YXRlU2NyaXB0OndpdGhTb3VyY2VVUkw6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBl
dmFsdWF0ZUpTU2NyaXB0Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRQcml2YXRlLmg6Cisg
ICAgICAgICogQVBJL0pTU2NyaXB0Lmg6CisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAg
ICAgICAoK1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOmluVmlydHVhbE1hY2hpbmU6XSk6Cisg
ICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3
aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTpdKToKKyAgICAgICAgKGNyZWF0ZUVycm9y
KToKKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6d2l0
aFNvdXJjZVVSTDphbmRTb3VyY2U6YW5kQnl0ZWNvZGVDYWNoZTplcnJvcjpdKToKKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmluVmlydHVhbE1hY2hpbmU6bWVtb3J5TWFwcGVkRnJv
bUFTQ0lJRmlsZTp3aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6ZXJyb3I6XSk6CisgICAg
ICAgICgtW0pTU2NyaXB0IGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW0pT
U2NyaXB0IHNvdXJjZVVSTF0pOgorICAgICAgICAoLVtKU1NjcmlwdCB0eXBlXSk6CisgICAgICAg
ICgtW0pTU2NyaXB0IGpzU291cmNlQ29kZV0pOgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0ZUNh
Y2hlOl0pOgorICAgICAgICAoLVtKU1NjcmlwdCBzZXRTb3VyY2VVUkw6XSk6CisgICAgICAgICgt
W0pTU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdKToKKyAgICAgICAgKC1bSlNTY3Jp
cHQgd3JpdGVDYWNoZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU1NjcmlwdCBqc1NvdXJjZUNv
ZGU6XSk6IERlbGV0ZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAg
ICAgKiBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDoKKyAgICAgICAgKHRlc3RG
dW5jdGlvbk92ZXJyaWRlcyk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVt
cEZpbGUpOgorICAgICAgICAodGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAodGVz
dFByb2dyYW1CeXRlY29kZUNhY2hlKToKKyAgICAgICAgKHRlc3RCeXRlY29kZUNhY2hlV2l0aFN5
bnRheEVycm9yKToKKyAgICAgICAgKHRlc3RQcm9ncmFtSlNTY3JpcHRFeGNlcHRpb24pOgorICAg
ICAgICAodGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkpOgorICAgICAgICAoK1tKU0NvbnRleHRN
ZW1vcnlNYXBwZWRMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVu
dGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAo
dGVzdExvYWRCYXNpY0ZpbGUpOgorICAgICAgICAoK1tKU0NvbnRleHRBdWdtZW50ZWRMb2FkZXJE
ZWxlZ2F0ZSBuZXdDb250ZXh0XSk6CisgICAgICAgICgtW0pTQ29udGV4dEF1Z21lbnRlZExvYWRl
ckRlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFu
ZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAodGVzdEpTU2NyaXB0VVJMKToKKyAg
ICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKHRlc3RCeXRlY29kZUNhY2hlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvZm9vLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKToKKwogMjAx
OS0wMi0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIFJlbW92ZSBXYXRjaHBvaW50U2V0IGNyZWF0aW9uIGZvciBTeW1ib2xUYWJsZSBlbnRyaWVz
IGlmIFZNOjpjYW5Vc2VKSVQoKSByZXR1cm5zIGZhbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvY29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZp
Zy5oCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBKU0NfQVBJX0FWQUlM
QUJMRSguLi4pCiAjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKSBKU19FWFBPUlQKKyNk
ZWZpbmUgSlNDX0FQSV9ERVBSRUNBVEVEKC4uLikKIC8vIFVzZSB6ZXJvIHNpbmNlIGl0IHdpbGwg
YmUgbGVzcyB0aGFuIGFueSBwb3NzaWJsZSB2ZXJzaW9uIG51bWJlci4KICNkZWZpbmUgSlNDX01B
Q19WRVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
MjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogCitPQkpDX0NMQVNTIEpTU2NyaXB0OworCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewpAQCAtNTUsNiAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2Fk
ZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNW
YWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2Fk
ZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKIAor
ICAgIEpTVmFsdWUgbG9hZEFuZEV2YWx1YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9s
ZGVyJiwgSlNTY3JpcHQgKik7CisKIHByaXZhdGU6CiAgICAgSlNBUElHbG9iYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUs
ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw4ICszNCwxMCBAQAogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkV4Y2VwdGlv
bi5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQ
cm9taXNlLmgiCiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW1wb3J0
ICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Byb21pc2VEZWZlcnJlZC5oIgog
I2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNTb3VyY2VDb2RlLmgiCiAj
aW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTQzLDcgKzQ1LDYgQEAKICNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCiAjaW1wb3J0ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2ltcG9ydCAi
U291cmNlT3JpZ2luLmgiCi0KICNpbXBvcnQgPHd0Zi9VUkwuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC03NSwxMiArNzYsMjAgQEAgSWRlbnRpZmllciBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZAogICAgIEFTU0VSVChrZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNTeW1ib2woKSk7CiAgICAg
U3RyaW5nIG5hbWUgPSAga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOwogCi0gICAgVVJMIHJlZmVycmVy
VVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZlcnJlciktPnRyeUdldFZhbHVlKCkpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlzVmFsaWQoKSk7Ci0KLSAgICBVUkwgdXJs
ID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKLSAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICBpZiAoSlNT
dHJpbmcqIHJlZmVycmVyU3RyaW5nID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZtLCByZWZl
cnJlcikpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVmZXJyZXJTdHJpbmctPnZhbHVlKGV4
ZWMpOworICAgICAgICBVUkwgcmVmZXJyZXJVUkwoeyB9LCB2YWx1ZSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVy
cmVyVVJMLmlzVmFsaWQoKSk7CisKKyAgICAgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwg
bmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9IGVsc2UgeworICAgICAgICBV
UkwgdXJsID0gVVJMKHsgfSwgbmFtZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKyAgICB9
CiAKICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBV
UkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKICAgICByZXR1cm4geyB9OwpAQCAtMTYy
LDIwICsxNzEsNDMgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptbwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAi
Tm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CiAKICAgICBhdXRvIGRlZmVycmVkUHJvbWlz
ZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOwotICAg
IGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSog
ZXhlYykgewogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRo
YXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKIAogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBpZiAoVU5MSUtFTFkoIVtzY3JpcHQg
aXNLaW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpIHsKLSAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2YgcmVzb2x1dGlvbiBj
YWxsYmFjayBpcyBub3QgYSBKU1NjcmlwdCIpKTsKKworICAgICAgICBhdXRvIHJlamVjdFByb21p
c2UgPSBbJl0gKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVh
dGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwogICAgICAgICAgICAgY2FsbChleGVjLCBkZWZl
cnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hv
dWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRl
ZmluZWQoKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoIVtzY3JpcHQgaXNL
aW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZSgiRmlyc3QgYXJndW1lbnQgb2YgcmVzb2x1dGlvbiBjYWxsYmFjayBpcyBub3QgYSBK
U1NjcmlwdCJfcyk7CisKKyAgICAgICAgSlNTY3JpcHQqIGpzU2NyaXB0ID0gc3RhdGljX2Nhc3Q8
SlNTY3JpcHQgKj4oc2NyaXB0KTsKKworICAgICAgICBKU1NvdXJjZUNvZGUqIHNvdXJjZSA9IFtq
c1NjcmlwdCBqc1NvdXJjZUNvZGVdOworICAgICAgICBpZiAoVU5MSUtFTFkoW2pzU2NyaXB0IHR5
cGVdICE9IGtKU1NjcmlwdFR5cGVNb2R1bGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2UoIlRoZSBKU1NjcmlwdCB0aGF0IHdhcyBwcm92aWRlZCBkaWQgbm90IGhhdmUgZXhwZWN0
ZWQgdHlwZSBvZiBrSlNTY3JpcHRUeXBlTW9kdWxlLiJfcyk7CisKKyAgICAgICAgLy8gRklYTUU6
IFRoZSBTUEkgd2UncmUgZGVwcmVjYXRpbmcgZGlkIG5vdCByZXF1aXJlIHNvdXJjZVVSTCwgc28g
d2UganVzdAorICAgICAgICAvLyBpZ25vcmUgdGhpcyBjaGVjayBmb3Igc3VjaCB1c2UgY2FzZXMg
dW50aWwgd2UgY2FuIHJlbW92ZSB0aGF0IFNQSS4gT25jZQorICAgICAgICAvLyB3ZSBkbyB0aGF0
LCB3ZSBjYW4gcmVtb3ZlIHRoZSBudWxsIGNoZWNrIGZvciBzb3VyY2VVUkw6CisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ5MDkKKyAgICAgICAg
aWYgKE5TVVJMICpzb3VyY2VVUkwgPSBbanNTY3JpcHQgc291cmNlVVJMXSkgeworICAgICAgICAg
ICAgU3RyaW5nIG9sZE1vZHVsZUtleSB7IFtzb3VyY2VVUkwgYWJzb2x1dGVTdHJpbmddIH07Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG9sZE1v
ZHVsZUtleSkgIT0gbW9kdWxlS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZShtYWtlU3RyaW5nKCJUaGUgc2FtZSBKU1NjcmlwdCB3YXMgcHJvdmlkZWQgZm9yIHR3byBk
aWZmZXJlbnQgaWRlbnRpZmllcnMsIHByZXZpb3VzbHk6ICIsIG9sZE1vZHVsZUtleSwgIiBhbmQg
bm93OiAiLCBtb2R1bGVLZXkuc3RyaW5nKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFtqc1NjcmlwdCBzZXRTb3VyY2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6c3RhdGljX2Nh
c3Q8TlNTdHJpbmcgKj4obW9kdWxlS2V5LnN0cmluZygpKV1dOworICAgICAgICAgICAgc291cmNl
ID0gW2pzU2NyaXB0IGZvcmNlUmVjcmVhdGVKU1NvdXJjZUNvZGVdOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXJncy5hcHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3Vy
Y2VDb2RlOm1vZHVsZUtleV0pOworICAgICAgICBhcmdzLmFwcGVuZChzb3VyY2UpOwogICAgICAg
ICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUo
KSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpAQCAtMjEwLDYgKzI0MiwyMiBAQCBKU09i
amVjdCogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlCiAgICAgcmV0dXJuIG1ldGFQcm9w
ZXJ0aWVzOwogfQogCitKU1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVK
U1NjcmlwdE1vZHVsZShjb25zdCBKU0xvY2tIb2xkZXImLCBKU1NjcmlwdCAqc2NyaXB0KQorewor
ICAgIEFTU0VSVChzY3JpcHQudHlwZSA9PSBrSlNTY3JpcHRUeXBlTW9kdWxlKTsKKyAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBJZGVudGlmaWVy
IGtleSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nIHsgW1tzY3JpcHQgc291
cmNlVVJMXSBhYnNvbHV0ZVN0cmluZ10gfSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21p
c2UgPSBpbXBvcnRNb2R1bGUoZXhlYywga2V5LCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8gcmVzdWx0
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCB0aGlzKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJlc3VsdC0+cmVzb2x2ZShleGVjLCBwcm9t
aXNlKTsKKyAgICByZXR1cm4gcmVzdWx0LT5wcm9taXNlKCk7Cit9CisKIH0KIAogI2VuZGlmIC8v
IEpTQ19PQkpDX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIkpTQmFzZUludGVybmFsLmgiCiAj
aW5jbHVkZSAiSlNCYXNlUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgpAQCAtNDcs
MjUgKzQ4LDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWVSZWYgSlNFdmFs
dWF0ZVNjcmlwdChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0
SW50ZXJuYWwoY29uc3QgSlNMb2NrSG9sZGVyJiwgRXhlY1N0YXRlKiBleGVjLCBKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAoIWN0eCkgewotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIodm0pOworICAgIFVOVVNFRF9QQVJBTShjdHgpOwogCiAgICAgSlNPYmpl
Y3QqIGpzVGhpc09iamVjdCA9IHRvSlModGhpc09iamVjdCk7CiAKLSAgICBzdGFydGluZ0xpbmVO
dW1iZXIgPSBzdGQ6Om1heCgxLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotCiAgICAgLy8gZXZhbHVh
dGUgc2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAorICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7Ci0gICAgYXV0byBzb3VyY2VVUkxTdHJpbmcgPSBz
b3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCk7Ci0gICAgU291cmNlQ29k
ZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIFNvdXJjZU9yaWdpbiB7IHNv
dXJjZVVSTFN0cmluZyB9LCBVUkwoeyB9LCBzb3VyY2VVUkxTdHJpbmcpLCBUZXh0UG9zaXRpb24o
T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJlciksIE9yZGlu
YWxOdW1iZXIoKSkpOwotCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0
aW9uOwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBwcm9maWxlZEV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBQcm9maWxpbmdSZWFzb246OkFQSSwgc291cmNlLCBqc1RoaXNP
YmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCkBAIC04MCw3ICs3MSw3IEBAIEpTVmFsdWVS
ZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICAgICAgLy8gV2UgY291bGQgc3Rh
c2ggaXQgaW4gdGhlIGluc3BlY3RvciBpbiBjYXNlIGFuIGluc3BlY3RvciBpcyBldmVyIG9wZW5l
ZC4KICAgICAgICAgZ2xvYmFsT2JqZWN0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJ
RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAocmV0dXJu
VmFsdWUpCkBAIC05MCw2ICs4MSwyNCBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlND
b250ZXh0UmVmCiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzVW5kZWZpbmVkKCkpOwogfQogCitK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYg
c2NyaXB0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAo
IWN0eCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgc3Rh
cnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKworICAg
IGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6
IFN0cmluZygpOworICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0
cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwgc291cmNl
VVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChz
dGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKKworICAgIHJldHVybiBKU0V2
YWx1YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBleGVjLCBjdHgsIHRoaXNPYmplY3QsIHNvdXJj
ZSwgZXhjZXB0aW9uKTsKK30KKwogYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJl
ZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKCFjdHgp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFsLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvV2ViS2l0QXZhaWxh
YmlsaXR5Lmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNMb2NrSG9sZGVyOworY2xhc3Mg
RXhlY1N0YXRlOworfQorCitleHRlcm4gIkMiIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdElu
dGVybmFsKGNvbnN0IEpTQzo6SlNMb2NrSG9sZGVyJiwgSlNDOjpFeGVjU3RhdGUqLCBKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAi
QVBJQ2FzdC5oIgogI2ltcG9ydCAiQ29tcGxldGlvbi5oIgorI2ltcG9ydCAiSlNCYXNlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkpTQ0lubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFs
LmgiCiAjaW1wb3J0ICJKU0NvbnRleHRQcml2YXRlLmgiCkBAIC0xMTIsMTAgKzExMywzOCBAQCAt
IChKU1ZhbHVlICopZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopCiAKICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCiAgICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246
ZXhjZXB0aW9uVmFsdWVdOwotCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKIH0KIAorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlSlNT
Y3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0Cit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICBpZiAoc2NyaXB0LnR5cGUgPT0ga0pTU2Ny
aXB0VHlwZVByb2dyYW0pIHsKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IG51
bGxwdHI7CisgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdEludGVy
bmFsKGxvY2tlciwgZXhlYywgbV9jb250ZXh0LCBudWxscHRyLCBbc2NyaXB0IGpzU291cmNlQ29k
ZV0tPnNvdXJjZUNvZGUoKSwgJmV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvblZhbHVlXTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKKyAgICB9CisKKyAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9iamVjdCo+KHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQor
ICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJvbWlzZVJlamVjdGVkV2l0aFJl
YXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiQ29udGV4dCBkb2Vz
IG5vdCBzdXBwb3J0IG1vZHVsZSBsb2FkaW5nIiBpbkNvbnRleHQ6c2VsZl0gaW5Db250ZXh0OnNl
bGZdOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBnbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0
TW9kdWxlKGxvY2tlciwgc2NyaXB0KTsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2Vw
dGlvbigpLT52YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE5ld1Byb21pc2VSZWplY3RlZFdpdGhSZWFzb246
W0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2Vs
Zl0gaW5Db250ZXh0OnNlbGZdOworICAgIH0KKyAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
SlNWYWx1ZVJlZjp0b1JlZih2bSwgcmVzdWx0KSBpbkNvbnRleHQ6c2VsZl07Cit9CisKIC0gKHZv
aWQpc2V0RXhjZXB0aW9uOihKU1ZhbHVlICopdmFsdWUKIHsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMobV9jb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsMTYgQEAKIC8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0IHdpbGwgdXNl
IHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdhdGUgd2lsbCBi
ZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdlYlZpZXcuICovCiBAcHJvcGVy
dHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+IG1vZHVsZUxv
YWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhK
U0NfSU9TX1RCQSkpOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJ1biBhIEpTU2NyaXB0
LgorIEBwYXJhbSBzY3JpcHQgdGhlIEpTU2NyaXB0IHRvIGV2YWx1YXRlLgorIEBkaXNjdXNzaW9u
IElmIHRoZSBwcm92aWRlZCBKU1NjcmlwdCB3YXMgY3JlYXRlZCB3aXRoIGtKU1NjcmlwdFR5cGVQ
cm9ncmFtLCB0aGUgc2NyaXB0IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkgYW5kIHJldHVybiB0aGUg
cmVzdWx0IG9mIGV2YWx1YXRpb24uCisKKyBPdGhlcndpc2UsIGlmIHRoZSBzY3JpcHQgd2FzIGNy
ZWF0ZWQgd2l0aCBrSlNTY3JpcHRUeXBlTW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgcnVuIGFz
eW5jaHJvbm91c2x5IGFuZCB3aWxsIHJldHVybiBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUg
bW9kdWxlIGFuZCBhbnkgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZC4gVGhlIG1v
ZHVsZSBsb2FkZXIgd2lsbCB0cmVhdCB0aGUgc2NyaXB0IGFzIGlmIGl0IGhhZCBiZWVuIHJldHVy
bmVkIGZyb20gYSBkZWxlZ2F0ZSBjYWxsIHRvIG1vZHVsZUxvYWRlckRlbGVnYXRlLiBUaGlzIG1p
cnJvcnMgdGhlIEphdmFTY3JpcHQgZHluYW1pYyBpbXBvcnQgb3BlcmF0aW9uLgorICovCistIChK
U1ZhbHVlICopZXZhbHVhdGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQ7CisKIEBlbmQKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCShyZXZpc2lvbiAy
NDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDM3ICszMSw4NCBAQCBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiBAY2xh
c3MgSlNWaXJ0dWFsTWFjaGluZTsKIAorLyohCisgQGVudW0gSlNTY3JpcHRUeXBlCisgQGFic3Ry
YWN0ICAgICBBIGNvbnN0YW50IGlkZW50aWZ5aW5nIHRoZSBleGVjdXRpb24gdHlwZSBvZiBhIEpT
U2NyaXB0LgorIEBjb25zdGFudCAgICAga0pTU2NyaXB0VHlwZVByb2dyYW0gIFRoZSB0eXBlIG9m
IGEgbm9ybWFsIEphdmFTY3JpcHQgcHJvZ3JhbS4KKyBAY29uc3RhbnQgICAgIGtKU1NjcmlwdFR5
cGVNb2R1bGUgICBUaGUgdHlwZSBvZiBhIG1vZHVsZSBKYXZhU2NyaXB0IHByb2dyYW0uCisgKi8K
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEpTU2NyaXB0VHlwZSkgeworICAgIGtKU1Njcmlw
dFR5cGVQcm9ncmFtLAorICAgIGtKU1NjcmlwdFR5cGVNb2R1bGUsCit9OworCisKIEpTQ19DTEFT
U19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKIEBpbnRl
cmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAogCiAvKiEKKyBUaGlzIFNQSSBpcyBkZXByZWNhdGVk
IGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAic2NyaXB0T2ZUeXBlOndpdGhTb3VyY2U6YW5k
U291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjoiIGluc3Rl
YWQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0
cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gSlND
X0FQSV9ERVBSRUNBVEVEKCJVc2UgK3NjcmlwdE9mVHlwZTp3aXRoU291cmNlOmFuZFNvdXJjZVVS
TDphbmRCeXRlY29kZUNhY2hlOmluVmlydHVhbE1hY2hpbmU6ZXJyb3I6IGluc3RlYWQuIiwgbWFj
b3N4KEpTQ19NQUNfVEJBLCBKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSwgSlNDX0lPU19U
QkEpKTsKKworLyohCisgVGhpcyBTUEkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1
c2VkLiBVc2UgInNjcmlwdE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhTb3Vy
Y2VVUkw6YW5kQnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5lOmVycm9yOiIgaW5zdGVhZC4K
KyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGggSlNDX0FQSV9ERVBSRUNBVEVEKCJVc2Ug
K3NjcmlwdE9mVHlwZTptZW1vcnlNYXBwZWRGcm9tQVNDSUlGaWxlOndpdGhTb3VyY2VVUkw6YW5k
Qnl0ZWNvZGVDYWNoZTppblZpcnR1YWxNYWNoaW5lOmVycm9yOiBpbnN0ZWFkLiIsIG1hY29zeChK
U0NfTUFDX1RCQSwgSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEsIEpTQ19JT1NfVEJBKSk7
CisKKy8qIQorIFRoaXMgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4K
KyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwg
KilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENv
ZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNh
Y2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBKU0NfQVBJX0RFUFJFQ0FURUQoIkRvIG5v
dCB1c2UgdGhpcy4gVXNlICtzY3JpcHRPZlR5cGU6bWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTp3
aXRoU291cmNlVVJMOmFuZEJ5dGVjb2RlQ2FjaGU6aW5WaXJ0dWFsTWFjaGluZTplcnJvcjogb3Ig
K3NjcmlwdE9mVHlwZTp3aXRoU291cmNlOmFuZFNvdXJjZVVSTDphbmRCeXRlY29kZUNhY2hlOmlu
VmlydHVhbE1hY2hpbmU6ZXJyb3I6IGluc3RlYWQiLCBtYWNvc3goSlNDX01BQ19UQkEsIEpTQ19N
QUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBLCBKU0NfSU9TX1RCQSkpOworCisvKiEKICBAbWV0aG9k
CiAgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwg
bWFjaGluZS4KKyBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBKYXZhU2NyaXB0IHNvdXJjZS4KICBA
cGFyYW0gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2
YWx1YXRlZCBieSB0aGUgSlMgdm0uCisgQHBhcmFtIHNvdXJjZVVSTCBUaGUgc291cmNlIFVSTCB0
byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1vZHVsZXMsIHRoaXMgaXMgdGhlIG1v
ZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUg
cGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLiBPbiBj
cmVhdGlvbiwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRoZSBjYWNoZWQgYnl0ZWNvZGUgb2Zm
IGRpc2suIElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhpcyBsb2NhdGlvbiBpcyBzdGFsZSwg
eW91IHNob3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBjYWxsaW5nIHRoaXMgY29uc3RydWN0
b3IuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2
YWx1YXRlZCBpbi4KKyBAcGFyYW0gZXJyb3IgQSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHNjcmlw
dCBjb3VsZCBub3QgYmUgY3JlYXRlZCBpZiB0aGUgcmVzdWx0IGlzIG5pbC4KICBAcmVzdWx0IFRo
ZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlIGF0IGNhY2hlUGF0aCBzaG91bGQg
bm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgZm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uCiAgKi8K
LSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisrIChudWxsYWJs
ZSBpbnN0YW5jZXR5cGUpc2NyaXB0T2ZUeXBlOihKU1NjcmlwdFR5cGUpdHlwZSB3aXRoU291cmNl
OihOU1N0cmluZyAqKXNvdXJjZSBhbmRTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSBlcnJvcjoob3V0IE5TRXJyb3IgKiBfTnVsbGFibGUgKiBf
TnVsbGFibGUpZXJyb3I7CiAKIC8qIQogIEBtZXRob2QKICBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNT
Y3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEg
Y29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIHR5cGUgVGhlIHR5cGUg
b2YgSmF2YVNjcmlwdCBzb3VyY2UuCiAgQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcg
dGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFtIHNvdXJj
ZVVSTCBUaGUgc291cmNlIFVSTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjcmlwdC4gRm9yIG1v
ZHVsZXMsIHRoaXMgaXMgdGhlIG1vZHVsZSBpZGVudGlmaWVyLgorIEBwYXJhbSBjYWNoZVBhdGgg
QSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBm
dXR1cmUgZXhlY3V0aW9uLiBPbiBjcmVhdGlvbiwgd2UgdXNlIHRoaXMgcGF0aCB0byBsb2FkIHRo
ZSBjYWNoZWQgYnl0ZWNvZGUgb2ZmIGRpc2suIElmIHRoZSBjYWNoZWQgYnl0ZWNvZGUgYXQgdGhp
cyBsb2NhdGlvbiBpcyBzdGFsZSwgeW91IHNob3VsZCBkZWxldGUgdGhhdCBmaWxlIGJlZm9yZSBj
YWxsaW5nIHRoaXMgY29uc3RydWN0b3IuCiAgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5l
IHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KLSBAcGFyYW0gY29kZVNpZ25pbmdQYXRo
IEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZp
bGVQYXRoIG9uIGRpc2suCi0gQHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBw
YXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHBh
cmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Ygd2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNy
ZWF0ZWQgaWYgdGhlIHJlc3VsdCBpcyBuaWwuCiAgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KLSBA
ZGlzY3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5kIGNh
Y2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlmZWN5
Y2xlIG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJlIG5v
dCB1c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0dXJl
LgorIEBkaXNjdXNzaW9uIFRoZSBmaWxlcyBhdCBmaWxlUGF0aCBhbmQgY2FjaGVQYXRoIHNob3Vs
ZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gVGhp
cyBtZXRob2Qgd2lsbCBmaWxlIGJhY2sgdGhlIG1lbW9yeSBmb3IgdGhlIHNvdXJjZS4KIAogIElm
IHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJldHVy
biBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxl
OihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUgaW5z
dGFuY2V0eXBlKXNjcmlwdE9mVHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgbWVtb3J5TWFwcGVkRnJv
bUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJj
ZVVSTCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aCBpblZpcnR1
YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gZXJyb3I6KG91dCBOU0Vycm9yICogX051
bGxhYmxlICogX051bGxhYmxlKWVycm9yOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENh
Y2hlIHRoZSBieXRlY29kZSBmb3IgdGhpcyBKU1NjcmlwdCB0byBkaXNrIGF0IHRoZSBwYXRoIHBh
c3NlZCBpbiBkdXJpbmcgY3JlYXRpb24uCisgQHBhcmFtIGVycm9yIEEgZGVzY3JpcHRpb24gb2Yg
d2h5IHRoZSBzY3JpcHQgY291bGQgbm90IGJlIGNhY2hlZCBpZiB0aGUgcmVzdWx0IGlzIEZBTFNF
LgorICovCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KG91dCBOU0Vycm9yICogX051
bGxhYmxlICogX051bGxhYmxlKWVycm9yOwogCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IFJl
dHVybnMgdGhlIEpTU2NyaXB0VHlwZSBvZiB0aGlzIEpTU2NyaXB0LgorICovCistIChKU1Njcmlw
dFR5cGUpdHlwZTsKIAogLyohCi0gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFsZW50
IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6
YW5kQnl0ZWNvZGVDYWNoZTouCisgQG1ldGhvZAorIEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBzb3Vy
Y2VVUkwgb2YgdGhpcyBKU1NjcmlwdC4KICAqLwotKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsK
Ky0gKE5TVVJMICopc291cmNlVVJMOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5tbQkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAj
aW1wb3J0ICJQYXJzZXJFcnJvci5oIgogI2ltcG9ydCAiU3ltYm9sLmgiCiAjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKICAgICBfX3dlYWsgSlNWaXJ0
dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKKyAgICBKU1NjcmlwdFR5cGUgbV90eXBlOwor
ICAgIEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkU291cmNlOwogICAgIFN0cmlu
ZyBtX3NvdXJjZTsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fc291cmNlVVJMOwogICAgIFJldGFp
blB0cjxOU1VSTD4gbV9jYWNoZVBhdGg7CiAgICAgSlNDOjpDYWNoZWRCeXRlY29kZSBtX2NhY2hl
ZEJ5dGVjb2RlOwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNTb3VyY2VDb2RlPiBtX2pzU291cmNl
Q29kZTsKQEAgLTUzLDYgKzU3LDcgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6
KE5TU3RyaQogICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CiAgICAgcmVzdWx0
LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CisgICAgcmVzdWx0LT5tX3R5cGUgPSBrSlNTY3JpcHRU
eXBlTW9kdWxlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTkwLDEyICs5NSwxMyBAQCBz
dGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlCiAKICsgKGluc3RhbmNldHlw
ZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25p
bmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShjb2Rl
U2lnbmluZ1BhdGgpOworICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworCiAgICAgVVJMIGZp
bGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhVUkwu
aXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0
IGludG8gZGlydHkgbWVtb3J5LgorCiAgICAgVmVjdG9yPExDaGFyPiBidWZmZXI7CiAgICAgaWYg
KCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0xMDYsOCArMTEyLDcgQEAgKyAo
aW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVQogICAgIEpTU2NyaXB0ICpyZXN1
bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+
bV92aXJ0dWFsTWFjaGluZSA9IHZtOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwot
ICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Ci0gICAgW3Jlc3VsdCByZWFkQ2Fj
aGVdOworICAgIHJlc3VsdC0+bV90eXBlID0ga0pTU2NyaXB0VHlwZU1vZHVsZTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0xMTYsNiArMTIxLDUzIEBAICsgKGluc3RhbmNldHlwZSlzY3Jp
cHRGcm9tVVRGOEZpbGU6KE5TVVIKICAgICByZXR1cm4gW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJ
SUZpbGU6ZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSB3aXRoQ29kZVNpZ25pbmc6Y29kZVNp
Z25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoXTsKIH0KIAorc3RhdGljIEpTU2Ny
aXB0ICpjcmVhdGVFcnJvcihOU1N0cmluZyAqbWVzc2FnZSwgTlNFcnJvcioqIGVycm9yKQorewor
ICAgIGlmIChlcnJvcikKKyAgICAgICAgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OkAiSlNTY3JpcHRFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZvOkB7IEAibWVzc2FnZSI6IG1l
c3NhZ2UgfV07CisgICAgcmV0dXJuIG5pbDsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdE9m
VHlwZTooSlNTY3JpcHRUeXBlKXR5cGUgd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgYW5k
U291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNh
Y2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gZXJyb3I6KG91
dCBOU0Vycm9yICoqKWVycm9yCit7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBKU1Nj
cmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1bHQtPm1fdHlwZSA9IHR5
cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fc291cmNl
VVJMID0gc291cmNlVVJMOworICAgIHJlc3VsdC0+bV9jYWNoZVBhdGggPSBjYWNoZVBhdGg7Cisg
ICAgW3Jlc3VsdCByZWFkQ2FjaGVdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKysgKGluc3Rh
bmNldHlwZSlzY3JpcHRPZlR5cGU6KEpTU2NyaXB0VHlwZSl0eXBlIG1lbW9yeU1hcHBlZEZyb21B
U0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VV
UkwgYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtIGVycm9yOihvdXQgTlNFcnJvciAqKillcnJvcgoreworICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNv
bHV0ZVVSTF0pOworICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUVycm9yKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmlsZSBwYXRo
ICVAIGlzIG5vdCBhIGxvY2FsIGZpbGUiLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihmaWxlUGF0
aFVSTCldLCBlcnJvcik7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBTdHJpbmcg
c3lzdGVtUGF0aCA9IGZpbGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCk7CisgICAgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEgZmlsZURhdGEoc3lzdGVtUGF0aCwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJGaWxlIGF0IHBhdGggJUAgY291bGQgbm90IGJlIG1hcHBlZC4iLCBzdGF0aWNf
Y2FzdDxOU1N0cmluZyAqPihzeXN0ZW1QYXRoKV0sIGVycm9yKTsKKworICAgIGlmICghY2hhcmFj
dGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxlRGF0YS5k
YXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKQorICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJOb3QgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSBhdCAl
QCBhcmUgQVNDSUkuIiwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oc3lzdGVtUGF0aCldLCBlcnJv
cik7CisKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKKyAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZyhTdHJpbmdJ
bXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhiaXR3aXNlX2Nhc3Q8Y29uc3QgTENoYXIqPihmaWxl
RGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkpKTsKKyAgICByZXN1bHQtPm1fbWFwcGVkU291
cmNlID0gV1RGTW92ZShmaWxlRGF0YSk7CisgICAgcmVzdWx0LT5tX3NvdXJjZVVSTCA9IHNvdXJj
ZVVSTDsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQg
cmVhZENhY2hlXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsK
ICAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgJiYgIW1fY2FjaGVkQnl0ZWNvZGUub3du
ZWQoKSkKQEAgLTE1MiwyMiArMjA0LDI2IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgbV9jYWNo
ZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIH0KIAot
LSAodm9pZCl3cml0ZUNhY2hlCistIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJy
b3IgKiopZXJyb3IKIHsKLSAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwgIW1fY2Fj
aGVQYXRoKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIGVycm9yU3RyaW5nIHsgfTsKKyAg
ICBbc2VsZiB3cml0ZUNhY2hlOmVycm9yU3RyaW5nXTsKKyAgICBpZiAoIWVycm9yU3RyaW5nLmlz
TnVsbCgpKSB7CisgICAgICAgIGNyZWF0ZUVycm9yKGVycm9yU3RyaW5nLCBlcnJvcik7CisgICAg
ICAgIHJldHVybiBOTzsKKyAgICB9CiAKLSAgICBKU0M6OlBhcnNlckVycm9yIGVycm9yOwotICAg
IG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUobV92aXJ0dWFs
TWFjaGluZS52bSwgbV9qc1NvdXJjZUNvZGUtPnNvdXJjZUNvZGUoKSwgZXJyb3IpOwotICAgIGlm
IChlcnJvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgZmQgPSBvcGVuKFtt
X2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwot
ICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByYyA9IGZsb2NrKGZk
LCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgd3JpdGUoZmQsIG1f
Y2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgY2xv
c2UoZmQpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopc291cmNlVVJMCit7Cisg
ICAgcmV0dXJuIG1fc291cmNlVVJMLmdldCgpOworfQorCistIChKU1NjcmlwdFR5cGUpdHlwZQor
eworICAgIHJldHVybiBtX3R5cGU7CiB9CiAKIEBlbmQKQEAgLTE4OSwyNCArMjQ1LDc1IEBAIC0g
KGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGUKICAgICByZXR1cm4gJm1fY2Fj
aGVkQnl0ZWNvZGU7CiB9CiAKLS0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNvZGU6KGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpbW9kdWxlS2V5CistIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlCiB7Ci0gICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7Ci0gICAgICAgIEFTU0VSVCht
b2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICBpZiAobV9qc1NvdXJjZUNvZGUp
CiAgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKworICAgIHJldHVybiBbc2Vs
ZiBmb3JjZVJlY3JlYXRlSlNTb3VyY2VDb2RlXTsKK30KKworLSAoQk9PTCl3cml0ZUNhY2hlOihT
dHJpbmcmKWVycm9yCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gWUVTOworCisgICAgaWYgKCFtX2NhY2hlUGF0aCkgeworICAgICAgICBlcnJvciA9
ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMg
SlNTY3JpcHQuIl9zOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgSlNDOjpQYXJz
ZXJFcnJvciBwYXJzZXJFcnJvcjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Uga0pT
U2NyaXB0VHlwZU1vZHVsZToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJh
dGVNb2R1bGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVd
LT5zb3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBr
SlNTY3JpcHRUeXBlUHJvZ3JhbToKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVCeXRlY29kZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBbc2VsZiBqc1NvdXJjZUNvZGVdLT5z
b3VyY2VDb2RlKCksIHBhcnNlckVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKHBhcnNlckVycm9yLmlzVmFsaWQoKSkgeworICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0g
eyB9OworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRl
Y29kZSBmb3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yOiAiLCBwYXJz
ZXJFcnJvci5tZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaW50
IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JP
TkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3Ry
aW5nKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmlu
ZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBO
TzsKICAgICB9CisgICAgaW50IHJldHVybkNvZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tf
TkIpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9j
ayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFscmVhZHkgYmUgaW4gdXNlLiJfczsKKyAgICBlbHNl
CisgICAgICAgIHdyaXRlKGZkLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRl
Y29kZS5zaXplKCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gIXJldHVybkNvZGU7Cit9
CisKKy0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybAoreworICAgIG1fc291cmNlVVJM
ID0gdXJsOworfQogCistIChKU0M6OkpTU291cmNlQ29kZSopZm9yY2VSZWNyZWF0ZUpTU291cmNl
Q29kZQorewogICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52bTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24geyB9OwotICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9
IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdpbiht
b2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9z
aXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSk7CisKKyAgICBT
dHJpbmcgdXJsID0gU3RyaW5nIHsgW1tzZWxmIHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddIH07
CisgICAgYXV0byB0eXBlID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVNb2R1bGUgPyBKU0M6OlNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlIDogSlNDOjpTb3VyY2VQcm92aWRlclNvdXJj
ZVR5cGU6OlByb2dyYW07CisgICAgUmVmPEpTU2NyaXB0U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNlbGYsIEpTQzo6U291cmNl
T3JpZ2luKHVybCksIFVSTCh7IH0sIHVybCksIHN0YXJ0UG9zaXRpb24sIHR5cGUpOwogICAgIEpT
Qzo6U291cmNlQ29kZSBzb3VyY2VDb2RlKFdURk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBv
c2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJh
c2VkSW50KCkpOwogICAgIEpTQzo6SlNTb3VyY2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpT
U291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZNb3ZlKHNvdXJjZUNvZGUpKTsKICAgICBtX2pzU291
cmNlQ29kZS5zZXQodm0sIGpzU291cmNlQ29kZSk7Ci0gICAgW3NlbGYgd3JpdGVDYWNoZV07CiAg
ICAgcmV0dXJuIGpzU291cmNlQ29kZTsKIH0KIAogQGVuZAogCi0KICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0
MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIC0gKHVuc2ln
bmVkKWhhc2g7CiAtIChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOwotLSAoY29uc3QgSlNDOjpD
YWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7Ci0tIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKy0gKG51bGxhYmxl
IGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOworLSAoSlNDOjpKU1Nv
dXJjZUNvZGUqKWpzU291cmNlQ29kZTsKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJl
cXVpcmUgc291cmNlVVJMIHVwb24gY3JlYXRpb246IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTQ5MDkKKy0gKEpTQzo6SlNTb3VyY2VDb2RlKilmb3JjZVJlY3JlYXRl
SlNTb3VyY2VDb2RlOworLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yOworLSAodm9p
ZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVz
dC5jcHAJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBpbnQgdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCkKIAogICAgIGNvbnN0IGNoYXIqIG9sZEZ1
bmN0aW9uT3ZlcnJpZGVzID0gT3B0aW9uczo6ZnVuY3Rpb25PdmVycmlkZXMoKTsKICAgICAKLSAg
ICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gInRlc3RhcGktZnVuY3Rpb24tb3ZlcnJp
ZGVzLmpzIjsKKyAgICBPcHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpID0gIi4vdGVzdGFwaVNj
cmlwdHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOwogICAgIEpTQzo6RnVuY3Rpb25P
dmVycmlkZXM6OnJlaW5zdGFsbE92ZXJyaWRlcygpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKG51bGxwdHIsIG51bGxwdHIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0SW5jbHVkZXMubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RJbmNsdWRl
cy5tCShyZXZpc2lvbiAyNDE4NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RJbmNsdWRlcy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIC8vIFNp
bmNlIHdlIGluY2x1ZGUgZmlsZXMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aHJvdWdoIHRoZSByZXdy
aXRlciB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgbm9uLXJld3JpdHRlbiB2YWx1ZXMuLi4KICNkZWZp
bmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBKU0NfQVBJX0RFUFJFQ0FURUQoLi4u
KQogI2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikKICNkZWZpbmUgSlNDX01BQ19WRVJT
SU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDI0MTg2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxMSArNDAsMTggQEAKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKICNpbmNs
dWRlICJKU1N0cmluZ1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJKU1dlYWtQcml2YXRlLmgiCisj
aWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxs
aW1pdHMuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaWYg
IU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTY3LDcgKzc0LDcgQEAKICNlbmRp
ZgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLXZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9p
ZCk7Cit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqKTsKICNlbmRpZgogCiBpbnQg
dGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKTsKQEAgLTEzODAsMTEgKzEzODcsMTkg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBTZXRFcnJvck1vZGUoMCk7
CiAjZW5kaWYKIAotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgdGVzdE9iamVjdGl2ZUNB
UEkoKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBjaGFyIHJlc29sdmVkUGF0aFtQQVRIX01BWF07
CisgICAgcmVhbHBhdGgoYXJndlswXSwgcmVzb2x2ZWRQYXRoKTsgCisgICAgY2hhciogbmV3Q1dE
ID0gZGlybmFtZShyZXNvbHZlZFBhdGgpOworICAgIGlmIChjaGRpcihuZXdDV0QpKQorICAgICAg
ICBmcHJpbnRmKHN0ZG91dCwgIkNvdWxkIG5vdCBjaGRpciB0bzogJXNcbiIsIG5ld0NXRCk7CiAj
ZW5kaWYKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IGFyZ2MgPiAxID8gYXJndlsxXSA6IE5V
TEw7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICB0ZXN0T2JqZWN0aXZlQ0FQSShmaWx0
ZXIpOworI2VuZGlmCisKICAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENBUElWaWFDcHAoZmlsdGVy
KSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTc5LDcgKzE5OTQs
NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIEpTT2JqZWN0TWFrZUNv
bnN0cnVjdG9yKGNvbnRleHQsIG51bGxDbGFzcywgMCk7CiAgICAgSlNDbGFzc1JlbGVhc2UobnVs
bENsYXNzKTsKIAotICAgIGNvbnN0IGNoYXIqIHNjcmlwdFBhdGggPSAidGVzdGFwaS5qcyI7Cisg
ICAgY29uc3QgY2hhciogc2NyaXB0UGF0aCA9ICIuL3Rlc3RhcGlTY3JpcHRzL3Rlc3RhcGkuanMi
OwogICAgIGNoYXIqIHNjcmlwdFVURjggPSBjcmVhdGVTdHJpbmdXaXRoQ29udGVudHNPZkZpbGUo
c2NyaXB0UGF0aCk7CiAgICAgaWYgKCFzY3JpcHRVVEY4KSB7CiAgICAgICAgIHByaW50ZigiRkFJ
TDogVGVzdCBzY3JpcHQgY291bGQgbm90IGJlIGxvYWRlZC5cbiIpOwpAQCAtMjA4MiwxMyArMjA5
NywxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICB9CiAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAgICAgfQotICAgIGZhaWxlZCA9
IHRlc3RUeXBlZEFycmF5Q0FQSSgpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0RXhlY3V0
aW9uVGltZUxpbWl0KCkgfHwgZmFpbGVkOwotICAgIGZhaWxlZCA9IHRlc3RGdW5jdGlvbk92ZXJy
aWRlcygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXIoKSB8fCBmYWlsZWQ7Ci0gICAgZmFpbGVkID0gdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxv
dygpIHx8IGZhaWxlZDsKLSAgICBmYWlsZWQgPSB0ZXN0SlNPTlBhcnNlKCkgfHwgZmFpbGVkOwot
ICAgIGZhaWxlZCA9IHRlc3RKU09iamVjdEdldFByb3h5VGFyZ2V0KCkgfHwgZmFpbGVkOworICAg
IGZhaWxlZCB8PSB0ZXN0VHlwZWRBcnJheUNBUEkoKTsKKyAgICBmYWlsZWQgfD0gdGVzdEV4ZWN1
dGlvblRpbWVMaW1pdCgpOworICAgIGZhaWxlZCB8PSB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKTsK
KyAgICBmYWlsZWQgfD0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCk7CisgICAgZmFp
bGVkIHw9IHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3coKTsKKyAgICBmYWlsZWQgfD0gdGVzdEpT
T05QYXJzZSgpOworICAgIGZhaWxlZCB8PSB0ZXN0SlNPYmplY3RHZXRQcm94eVRhcmdldCgpOwog
CiAgICAgLy8gQ2xlYXIgb3V0IGxvY2FsIHZhcmlhYmxlcyBwb2ludGluZyBhdCBKU09iamVjdFJl
ZnMgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGNvbGxlY3RlZAogICAgIGZ1bmN0aW9uID0g
TlVMTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0J
KHJldmlzaW9uIDI0MTg2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTIgQEAKICNpbXBvcnQgIlJlZ3Jl
c3MxNDEyNzUuaCIKICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAorI2lmIF9faGFzX2luY2x1
ZGUoPGxpYnByb2MuaD4pCisjZGVmaW5lIEhBU19MSUJQUk9DIDEKKyNpbXBvcnQgPGxpYnByb2Mu
aD4KKyNlbHNlCisjZGVmaW5lIEhBU19MSUJQUk9DIDAKKyNlbmRpZgogI2ltcG9ydCA8cHRocmVh
ZC5oPgogI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5oPgpA
QCAtNTQsNyArNjAsNyBAQCBleHRlcm4gIkMiIGJvb2wgX0Jsb2NrX2hhc19zaWduYXR1cmUoaWQp
CiBleHRlcm4gIkMiIGNvbnN0IGNoYXIgKiBfQmxvY2tfc2lnbmF0dXJlKGlkKTsKIAogZXh0ZXJu
IGludCBmYWlsZWQ7Ci1leHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9pZCk7Citl
eHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29uc3QgY2hhciopOwogZXh0ZXJuICJD
IiB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICosIGJvb2wpOwogCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKQEAgLTE5ODAsMjIgKzE5ODYsMzAgQEAgc3RhdGljIHZvaWQgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkK
K3N0YXRpYyBOU1VSTCAqdGVtcEZpbGUoTlNTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VSTCog
dGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJlY3Rv
cnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgIHJldHVybiBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6c3RyaW5nXTsKK30KKworc3RhdGljIHZvaWQgdGVzdE1vZHVs
ZUJ5dGVjb2RlQ2FjaGUoKQogewogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU1VS
TCogdGVtcERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBpc0RpcmVjdG9yeTpZRVNdOworICAgICAgICBOU1N0cmluZyAqZm9vU291cmNlID0g
QCJpbXBvcnQgJ290aGVyRGlyZWN0b3J5L2Jhei5qcyc7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsK
KyAgICAgICAgTlNTdHJpbmcgKmJhclNvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gJy4uL2Zv
by5qcyc7IGV4cG9ydCBsZXQgZm9vID0gKCkgPT4gbjsiOworICAgICAgICBOU1N0cmluZyAqYmF6
U291cmNlID0gQCJpbXBvcnQgeyBmb28gfSBmcm9tICcuLi9kaXJlY3RvcnkvYmFyLmpzJzsgZ2xv
YmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbygpOyI7CiAKLSAgICAgICAg
TlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsg
ZXhwb3J0IGxldCBmb28gPSBuOyI7Ci0gICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImlt
cG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7Ci0g
ICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9k
aXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAg
PSBmb287IjsKKyAgICAgICAgTlNVUkwgKmZvb1BhdGggPSB0ZW1wRmlsZShAImZvby5qcyIpOwor
ICAgICAgICBOU1VSTCAqYmFyUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzIik7CisgICAgICAgIE5T
VVJMICpiYXpQYXRoID0gdGVtcEZpbGUoQCJiYXouanMiKTsKIAotICAgICAgICBOU1VSTCogZm9v
UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5q
cyJdOwotICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOwotICAgICAgICBOU1VSTCogYmF6UGF0aCA9IFt0
ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhei5qcyJdOworICAg
ICAgICBOU1VSTCAqZm9vQ2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28uanMuY2FjaGUiKTsKKyAg
ICAgICAgTlNVUkwgKmJhckNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiYmFyLmpzLmNhY2hlIik7Cisg
ICAgICAgIE5TVVJMICpiYXpDYWNoZVBhdGggPSB0ZW1wRmlsZShAImJhei5qcy5jYWNoZSIpOwog
Ci0gICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKLSAgICAgICAgTlNVUkwqIGJhckNh
Y2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJh
ci5qcy5jYWNoZSJdOwotICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRoID0gW3RlbXBEaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNhY2hlIl07CisgICAgICAg
IE5TVVJMICpmb29GYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZm9vLmpzIl07
CisgICAgICAgIE5TVVJMICpiYXJGYWtlUGF0aCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIv
ZGlyZWN0b3J5L2Jhci5qcyJdOworICAgICAgICBOU1VSTCAqYmF6RmFrZVBhdGggPSBbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOkAiL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdOwogCiAgICAgICAgIFtm
b29Tb3VyY2Ugd3JpdGVUb1VSTDpmb29QYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJ
SVN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAgICAgICAgIFtiYXJTb3VyY2Ugd3JpdGVUb1VS
TDpiYXJQYXRoIGF0b21pY2FsbHk6Tk8gZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nIGVy
cm9yOm5pbF07CkBAIC0yMDAzLDEzICsyMDE3LDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RCeXRlY29k
ZUNhY2hlKCkKIAogICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQgKmNvbnRleHQsIEpT
VmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVjdCkgewog
ICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9y
eS9iYXIuanMiXSkKLSAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGluZTpj
b250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNo
ZTpmb29DYWNoZVBhdGhdXV07Ci0gICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQotICAgICAgICAgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmFyUGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5n
Om5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3Rvcnkv
YmF6LmpzIl0pCi0gICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtb
SlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29u
dGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6
YmF6Q2FjaGVQYXRoXV1dOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSlNTY3JpcHQg
KnNjcmlwdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmpl
Y3Q6W2Zvb0Zha2VQYXRoIGFic29sdXRlU3RyaW5nXV0pCisgICAgICAgICAgICAgICAgc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6Zm9vUGF0aCB3aXRoU291cmNlVVJMOmZvb0Zha2VQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZSBlcnJvcjpuaWxdOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVh
bFRvT2JqZWN0OltiYXJGYWtlUGF0aCBhYnNvbHV0ZVN0cmluZ11dKQorICAgICAgICAgICAgICAg
IHNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1v
cnlNYXBwZWRGcm9tQVNDSUlGaWxlOmJhclBhdGggd2l0aFNvdXJjZVVSTDpiYXJGYWtlUGF0aCBh
bmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmly
dHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpbYmF6RmFrZVBhdGggYWJzb2x1dGVTdHJpbmddXSkKKyAgICAgICAg
ICAgICAgICBzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1
bGUgbWVtb3J5TWFwcGVkRnJvbUFTQ0lJRmlsZTpiYXpQYXRoIHdpdGhTb3VyY2VVUkw6YmF6RmFr
ZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpiYXpDYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250
ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisKKyAgICAgICAgICAgIGlmIChzY3JpcHQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjpu
aWxdKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIFtyZXNv
bHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1d
OwogICAgICAgICB9OwogCkBAIC0yMDIzLDEyICsyMDQzLDc1IEBAIHN0YXRpYyB2b2lkIHRlc3RC
eXRlY29kZUNhY2hlKCkKICAgICAgICAgfQogCiAgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVN
YW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgICAgICBbZmlsZU1h
bmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKLSAgICAgICAgW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Ci0gICAgICAgIFtmaWxl
TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwotICAgICAgICBbZmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOwotICAgICAg
ICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOwot
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpu
aWxdOworICAgICAgICBCT09MIHJlbW92ZWRBbGwgPSB0cnVlOworICAgICAgICByZW1vdmVkQWxs
ICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vUGF0aCBlcnJvcjpuaWxdOworICAg
ICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFyUGF0aCBl
cnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICByZW1vdmVkQWxsICY9IFtmaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRVUkw6Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIHJl
bW92ZWRBbGwgJj0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJy
b3I6bmlsXTsKKyAgICAgICAgcmVtb3ZlZEFsbCAmPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBjaGVja1Jlc3VsdChAIlJlbW92
ZWQgYWxsIHRlbXAgZmlsZXMgY3JlYXRlZCIsIHJlbW92ZWRBbGwpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgdGVzdFByb2dyYW1CeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkgeyBy
ZXR1cm4gNDI7IH07IGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDQwOyB9OyBmb28oKSArIGJhcigp
OyI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGggPSB0ZW1wRmlsZShAImZvby5qcy5jYWNo
ZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtK
U1NjcmlwdFR5cGVQcm9ncmFtIHdpdGhTb3VyY2U6Zm9vU291cmNlIGFuZFNvdXJjZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAIm15LXBhdGgiXSBhbmRCeXRlY29kZUNhY2hlOmZvb0NhY2hlUGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgaWYgKCFbc2NyaXB0IGNhY2hl
Qnl0ZWNvZGVXaXRoRXJyb3I6bmlsXSkKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAg
SlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsKKyAgICAgICAgSlNWYWx1ZSAq
cmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChbcmVzdWx0IGlzTnVt
YmVyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAicmVzdWx0IG9mIGNhY2hlZCBwcm9ncmFtIGlz
IDQwKzQyIiwgW1tyZXN1bHQgdG9OdW1iZXJdIGludFZhbHVlXSA9PSA0MCArIDQyKTsKKyAgICAg
ICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisKKyAgICAgICAgTlNG
aWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07
CisgICAgICAgIEJPT0wgcmVtb3ZlZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6
Zm9vQ2FjaGVQYXRoIGVycm9yOm5pbF07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiUmVtb3ZlZCBh
bGwgdGVtcCBmaWxlcyBjcmVhdGVkIiwgcmVtb3ZlZEFsbCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTeW50YXhFcnJvcihKU1NjcmlwdFR5cGUgdHlwZSkK
K3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKmZvb1NvdXJjZSA9
IEAidGhpcyBpcyBhIHN5bnRheCBlcnJvciI7CisgICAgICAgIE5TVVJMICpmb29DYWNoZVBhdGgg
PSB0ZW1wRmlsZShAImZvby5qcy5jYWNoZSIpOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQg
PSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBb
SlNTY3JpcHQgc2NyaXB0T2ZUeXBlOnR5cGUgd2l0aFNvdXJjZTpmb29Tb3VyY2UgYW5kU291cmNl
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9v
Q2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpu
aWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAgICBOU0Vycm9yICpl
cnJvciA9IG5pbDsKKyAgICAgICAgaWYgKFtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjom
ZXJyb3JdKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXJy
b3IpOworICAgICAgICBjaGVja1Jlc3VsdChAIkdvdCBlcnJvciB3aGVuIHRyeWluZyB0byBjYWNo
ZSBieXRlY29kZSBmb3IgYSBzY3JpcHQgd2l0aCBhIHN5bnRheCBlcnJvci4iLCBbW2Vycm9yIGRl
c2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIlVuYWJsZSB0byBnZW5lcmF0ZSBieXRlY29kZSBm
b3IgdGhpcyBKU1NjcmlwdCBiZWNhdXNlIG9mIGEgcGFyc2VyIGVycm9yIl0pOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpCit7CisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAInRocm93IDQyOyI7
CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsK
KyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpzb3VyY2UgYW5kU291cmNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAibXktcGF0aCJdIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsIGluVmlydHVhbE1hY2hp
bmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChzY3JpcHQpOworICAgICAgICBfX2Jsb2NrIGJvb2wgaGFuZGxlZEV4Y2VwdGlvbiA9IGZh
bHNlOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqLCBK
U1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZWRFeGNlcHRpb24gPSB0cnVl
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoW2V4Y2VwdGlvbiBpc051bWJlcl0pOworICAg
ICAgICAgICAgY2hlY2tSZXN1bHQoQCJQcm9ncmFtIEpTU2NyaXB0IHdpdGggZXhjZXB0aW9uIHNo
b3VsZCBoYXZlIHRoZSBleGNlcHRpb24gdmFsdWUgYmUgNDIuIiwgW1tleGNlcHRpb24gdG9OdW1i
ZXJdIGludFZhbHVlXSA9PSA0Mik7CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAqcmVz
dWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHRdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQg
d2l0aCBleGNlcHRpb24gc2hvdWxkIHJldHVybiB1bmRlZmluZWQuIiwgW3Jlc3VsdCBpc1VuZGVm
aW5lZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlByb2dyYW0gSlNTY3JpcHQgd2l0aCBleGNl
cHRpb24gc2hvdWxkIGNhbGwgZXhjZXB0aW9uIGhhbmRsZXIuIiwgaGFuZGxlZEV4Y2VwdGlvbik7
CiAgICAgfQogfQogCkBAIC0yMDc4LDcgKzIxNjEsNyBAQCAtICh2b2lkKWNvbnRleHQ6KEpTQ29u
dGV4dCAqKWNvbnRleHQgZmV0CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0Zp
bGUoKQorc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGVMZWdhY3lTUEkoKQogewogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewogICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVM
b2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKQEAgLTIwODksNDEgKzIxNzIsMTc5IEBAIHN0YXRp
YyB2b2lkIHRlc3RMb2FkQmFzaWNGaWxlKCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdE9iamVjdGl2
ZUNBUEkoKQorCitAaW50ZXJmYWNlIEpTQ29udGV4dE1lbW9yeU1hcHBlZExvYWRlckRlbGVnYXRl
IDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUp
bmV3Q29udGV4dDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0TWVtb3J5TWFw
cGVkTG9hZGVyRGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAorewor
ICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilp
ZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0
SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBl
ZEZyb21BU0NJSUZpbGU6ZmlsZVBhdGggd2l0aFNvdXJjZVVSTDpmaWxlUGF0aCBhbmRCeXRlY29k
ZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgZXJyb3I6
bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUgdG8gY3Jl
YXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3RhdGljIHZv
aWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworI2lmIEhBU19MSUJQUk9DCisgICAgc2l6ZV90IGNv
dW50ID0gcHJvY19waWRpbmZvKGdldHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOwor
I2VuZGlmCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBb
SlNDb250ZXh0TWVtb3J5TWFwcGVkTG9hZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAg
IGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVl
ICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFzaWMuanMn
KTsiIHdpdGhTb3VyY2VVUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07CisgICAgICAgIEpTVmFs
dWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworI2lm
IEhBU19MSUJQUk9DCisgICAgICAgIHNpemVfdCBhZnRlckNvdW50ID0gcHJvY19waWRpbmZvKGdl
dHBpZCgpLCBQUk9DX1BJRExJU1RGRFMsIDAsIDAsIDApOworICAgICAgICBjaGVja1Jlc3VsdChA
IkpTU2NyaXB0IHNob3VsZCBub3QgaG9sZCBhIGZpbGUgZGVzY3JpcHRvciIsIGNvdW50ID09IGFm
dGVyQ291bnQpOworI2VuZGlmCisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBw
cm9taXNlLCBudWxsKTsKKyAgICB9CisjaWYgSEFTX0xJQlBST0MKKyAgICBzaXplX3QgYWZ0ZXIg
PSBwcm9jX3BpZGluZm8oZ2V0cGlkKCksIFBST0NfUElETElTVEZEUywgMCwgMCwgMCk7CisgICAg
Y2hlY2tSZXN1bHQoQCJGaWxlIGRlc2NyaXB0b3IgY291bnQgc2hvbHVkbid0IGNoYW5nZSBhZnRl
ciBjb250ZXh0IGlzIGRlYWxsb2NlZCIsIGNvdW50ID09IGFmdGVyKTsKKyNlbmRpZgorfQorCitA
aW50ZXJmYWNlIEpTQ29udGV4dEF1Z21lbnRlZExvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxK
U01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUg
eworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9
IFtbSlNDb250ZXh0QXVnbWVudGVkTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBm
ZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZl
SGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJl
amVjdAoreworICAgIFVOVVNFRF9QQVJBTShyZWplY3QpOworCisgICAgTlNVUkwgKmZpbGVQYXRo
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBOU1N0
cmluZyAqcGF0aFN0cmluZyA9IFtmaWxlUGF0aCBhYnNvbHV0ZVN0cmluZ107CisgICAgaWYgKFtw
YXRoU3RyaW5nIGNvbnRhaW5zU3RyaW5nOkAiYmFzaWMuanMiXSB8fCBbcGF0aFN0cmluZyBjb250
YWluc1N0cmluZzpAImZvby5qcyJdKSB7CisgICAgICAgIGF1dG8gKnNjcmlwdCA9IFtKU1Njcmlw
dCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZU1vZHVsZSBtZW1vcnlNYXBwZWRGcm9tQVNDSUlG
aWxlOmZpbGVQYXRoIHdpdGhTb3VyY2VVUkw6ZmlsZVBhdGggYW5kQnl0ZWNvZGVDYWNoZTpuaWwg
aW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJn
dW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoW3Bh
dGhTdHJpbmcgY29udGFpbnNTdHJpbmc6QCJiYXIuanMiXSkgeworICAgICAgICBhdXRvICpzY3Jp
cHQgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgd2l0aFNvdXJj
ZTpAIiIgYW5kU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvbm90L3BhdGgvdG8v
YmFyLmpzIl0gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZp
cnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7
CisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitAZW5kCisKK3N0YXRpYyB2b2lkIHRlc3RKU1NjcmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0QXVnbWVudGVkTG9h
ZGVyRGVsZWdhdGUgbmV3Q29udGV4dF07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVs
ZWdhdGUgPSBjb250ZXh0OworICAgICAgICBOU1VSTCAqYmFzaWMgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpAIi4vYmFzaWMuanMiIHJlbGF0aXZlVG9VUkw6cmVzb2x2ZVBhdGhUb1NjcmlwdHMoKV07
CisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNT
Y3JpcHRUeXBlTW9kdWxlIG1lbW9yeU1hcHBlZEZyb21BU0NJSUZpbGU6YmFzaWMgd2l0aFNvdXJj
ZVVSTDpiYXNpYyBhbmRCeXRlY29kZUNhY2hlOm5pbCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQu
dmlydHVhbE1hY2hpbmUgZXJyb3I6bmlsXTsKKworICAgICAgICBKU1ZhbHVlICpyZXN1bHQxID0g
W2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQxXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCByZXN1bHQxLCBudWxsKTsKKworICAgICAgICBOU1VS
TCAqZm9vID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIuL2Zvby5qcyIgcmVsYXRpdmVUb1VSTDpy
ZXNvbHZlUGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBbSlNT
Y3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVNb2R1bGUgbWVtb3J5TWFwcGVkRnJvbUFT
Q0lJRmlsZTpmb28gd2l0aFNvdXJjZVVSTDpmb28gYW5kQnl0ZWNvZGVDYWNoZTpuaWwgaW5WaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGVycm9yOm5pbF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmlwdDIpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQyID0gW2NvbnRl
eHQgZXZhbHVhdGVKU1NjcmlwdDpzY3JpcHQyXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgd2Fz
UmVqZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgW3Jlc3VsdDIgaW52b2tlTWV0aG9kOkAiY2F0Y2gi
IHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKnJlYXNvbikgeworICAgICAgICAgICAgd2FzUmVq
ZWN0ZWQgPSBbcmVhc29uIGlzT2JqZWN0XTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtb
cmVhc29uIHRvU3RyaW5nXSBjb250YWluc1N0cmluZzpAIlRoZSBzYW1lIEpTU2NyaXB0IHdhcyBw
cm92aWRlZCBmb3IgdHdvIGRpZmZlcmVudCBpZGVudGlmaWVycyJdKTsKKyAgICAgICAgfV1dOwor
CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTW9kdWxlIEpTU2NyaXB0IGltcG9ydGVkIHdpdGggZGlm
ZmVyZW50IGlkZW50aWZpZXJzIGlzIHJlamVjdGVkIiwgd2FzUmVqZWN0ZWQpOworICAgIH0KK30K
KworI2RlZmluZSBSVU4odGVzdCkgZG8geyBcCisgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0
KSkgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgTlNMb2coQCIlcy4uLlxuIiwgI3Rl
c3QpOyBcCisgICAgICAgIHRlc3Q7IFwKKyAgICAgICAgTlNMb2coQCIlczogZG9uZS5cbiIsICN0
ZXN0KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNv
bnN0IGNoYXIqIGZpbHRlcikKIHsKICAgICBOU0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJ
Iik7CiAKLSAgICBjaGVja05lZ2F0aXZlTlNJbnRlZ2VycygpOwotICAgIHJ1bkpJVFRocmVhZExp
bWl0VGVzdHMoKTsKKyAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdCkg
LT4gYm9vbCB7CisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gc3RyY2Fz
ZXN0cih0ZXN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAg
UlVOKGNoZWNrTmVnYXRpdmVOU0ludGVnZXJzKCkpOworICAgIFJVTihydW5KSVRUaHJlYWRMaW1p
dFRlc3RzKCkpOworCisgICAgUlVOKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJM
KCkpOworICAgIFJVTih0ZXN0RmV0Y2goKSk7CisgICAgUlVOKHRlc3RGZXRjaFdpdGhUd29DeWNs
ZSgpKTsKKyAgICBSVU4odGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKSk7CisgICAgUlVOKHRlc3RJ
bXBvcnRNb2R1bGVUd2ljZSgpKTsKKyAgICBSVU4odGVzdE1vZHVsZUJ5dGVjb2RlQ2FjaGUoKSk7
CisgICAgUlVOKHRlc3RQcm9ncmFtQnl0ZWNvZGVDYWNoZSgpKTsKKyAgICBSVU4odGVzdEJ5dGVj
b2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZVByb2dyYW0pKTsKKyAgICBSVU4o
dGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU3ludGF4RXJyb3Ioa0pTU2NyaXB0VHlwZU1vZHVsZSkpOwor
ICAgIFJVTih0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uKCkpOwogCi0gICAgdGVzdExvYWRl
clJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKLSAgICB0ZXN0RmV0Y2goKTsKLSAgICB0ZXN0
RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKLSAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOwotICAg
IHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOwotICAgIHRlc3RCeXRlY29kZUNhY2hlKCk7CisgICAg
UlVOKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOworICAgIFJVTih0ZXN0TG9hZGVy
UmVqZWN0c0ZhaWxlZEZldGNoKCkpOwogCi0gICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRV
UkwoKTsKLSAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisgICAgUlVOKHRlc3RK
U1NjcmlwdFVSTCgpKTsKIAogICAgIC8vIEZpbGUgbG9hZGluZwotICAgIHRlc3RMb2FkQmFzaWNG
aWxlKCk7CisgICAgUlVOKHRlc3RMb2FkQmFzaWNGaWxlTGVnYWN5U1BJKCkpOworICAgIFJVTih0
ZXN0TG9hZEJhc2ljRmlsZSgpKTsKIAotICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlv
bjo6UmVzb2x2ZUVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
amVjdEVhZ2VyKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVM
YXRlKTsKLSAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdExhdGUpOwot
ICAgIHByb21pc2VSZWplY3RPbkpTRXhjZXB0aW9uKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlc29s
dmVkKCk7Ci0gICAgcHJvbWlzZUNyZWF0ZVJlamVjdGVkKCk7Ci0gICAgcGFyYWxsZWxQcm9taXNl
UmVzb2x2ZVRlc3QoKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZXNvbHZlRWFnZXIpKTsKKyAgICBSVU4ocHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZWplY3RFYWdlcikpOworICAgIFJVTihwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJl
c29sdmVMYXRlKSk7CisgICAgUlVOKHByb21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVq
ZWN0TGF0ZSkpOworICAgIFJVTihwcm9taXNlUmVqZWN0T25KU0V4Y2VwdGlvbigpKTsKKyAgICBS
VU4ocHJvbWlzZUNyZWF0ZVJlc29sdmVkKCkpOworICAgIFJVTihwcm9taXNlQ3JlYXRlUmVqZWN0
ZWQoKSk7CisgICAgUlVOKHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkpOwogCiAgICAgdGVz
dE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CiAKICNlbHNlCiAKLXZvaWQgdGVzdE9iamVjdGl2ZUNB
UEkoKQordm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKikKIHsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9mb28uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0
cy9mb28uanMJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpU2NyaXB0cy9mb28uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbXBvcnQgIi4v
YmFyLmpzIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDE4
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODg0LDYgKzg4NCw3IEBACiAJCTUyQjMx
MTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdD
IC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjEx
RDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyog
VHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJEMTMwOTEyMjFDRTE3
NjAwOUM4MzZDIC8qIGZvby5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMg
Ki87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
Ki87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIx
MUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSAqLzsgfTsKIAkJNTMwQTY2
QkExRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjgxRkEzRTc3RTAwMjZBNTQ1
IC8qIFVuaWZpZWRTb3VyY2U0LW1tLm1tICovOyB9OwpAQCAtMTE2MCw2ICsxMTYxLDcgQEAKIAkJ
Nzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTgwQzE2RDFFM0E5NDBF
MDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8q
IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0
dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODkzNzc3
MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyog
QjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAx
RDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1h
cEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjAyOSw2ICsyMDMxLDcgQEAKIAkJCWRzdFBhdGggPSB0ZXN0YXBpU2NyaXB0czsKIAkJCWRz
dFN1YmZvbGRlclNwZWMgPSAxNjsKIAkJCWZpbGVzID0gKAorCQkJCTUyRDEzMDkxMjIxQ0UxNzYw
MDlDODM2QyAvKiBmb28uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1M0MzRDVF
NTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywK
IAkJCQlGRUNCOEIyQTFEMjVDQjVBMDA2RjI0NjMgLyogdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlk
ZXMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1REJCMTUxQjEzMUQwQjMxMDA1
NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLApAQCAtMzM3Nyw2
ICszMzgwLDcgQEAKIAkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJv
ZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHBhdGggPSBq
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzBBNjM0MDFGQTNFMzFDMDAyNkE1NDUgLyogU291cmNlc0NvY29hLnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTb3VyY2VzQ29jb2EudHh0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzc3Miw2ICszNzc2LDcgQEAKIAkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8q
IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0Mzkx
RjhDMEFDNzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cnVjdHVyZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4Njk0
M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cnVjdHVyZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5ODcyQzQ3MjIx
QkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NjFEQ0FCNTcz
MDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRml4ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaXhlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQQ1RvT3JpZ2luTWFwLmg7IHBhdGgg
PSBiMy9CM1BDVG9PcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5
OTUsNiArNjAwMCw3IEBACiAJCQkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3Jh
cHBlck9iamVjdC5tbSAqLywKIAkJCQkxNDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNl
LmNwcCAqLywKIAkJCQkxNDI3MTEzODBBNDYwQkJCMDA4MEVFRUEgLyogSlNCYXNlLmggKi8sCisJ
CQkJNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi8sCiAJCQkJ
MTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLywKIAkJCQkxNDQw
RjhBRDBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCAqLywKIAkJ
CQkxNDQwRjhBQzBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmggKi8s
CkBAIC02MzQwLDYgKzYzNDYsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQk1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi8sCisJCQkJNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLywKIAkJCSk7CiAJCQluYW1lID0gdGVz
dGFwaVNjcmlwdHM7CiAJCQlwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzOwpAQCAtOTc1
OCw2ICs5NzY1LDcgQEAKIAkJCQkwRkY0Mjc0ODE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDkxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzkxNzk5RTRCMjAwRDI4MzNEIC8q
IFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk4NzJDNDgyMjFCQkFG
MzAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0
MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjQyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAkocmV2aXNpb24gMjQxODY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsOCBAQCBDYWNo
ZWRCeXRlY29kZSBnZW5lcmF0ZUJ5dGVjb2RlKFZNJiB2bSwgCiAgICAgRXZhbENvbnRleHRUeXBl
IGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZTsKIAogICAgIFVubGlua2Vk
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCBzb3VyY2UsIHN0cmljdE1v
ZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZh
cmlhYmxlc1VuZGVyVERaKTsKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICBy
ZXR1cm4geyB9OwogICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2Rl
QmxvY2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBlLCBzdHJpY3RNb2RlLCBz
Y3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOwogfQogCkBAIC0xMTgsNiArMTIwLDggQEAgQ2FjaGVk
Qnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTQogICAgIEV2YWxDb250ZXh0VHlwZSBl
dmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CiAKICAgICBVbmxpbmtlZENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSwgc291cmNlLCBzdHJp
Y3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUs
ICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2Vk
Q29kZUJsb2NrLCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlLCBzdHJpY3RNb2Rl
LCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>