<?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>135423</bug_id>
          
          <creation_ts>2014-07-30 11:15:36 -0700</creation_ts>
          <short_desc>Allow high fidelity type profiling to be enabled and disabled.</short_desc>
          <delta_ts>2014-08-14 17:00:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1025751</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-30 11:15:36 -0700</bug_when>
    <thetext>Currently, the VM has little flexibility in whether it enables/disables type profiling. 
It either enables or disables type profiling based on a runtime flag in JSC::Options. 
This patch will provide the necessary infrastructure that enables type profiling to be 
turned on and off dynamically. Once it can be enabled/disabled dynamically, the Inspector can 
present a UI for showing type profiling because it can call into JSC to enable/disable type profiling. 
This will allow us to integrate type profiling in the WebKit nightly builds sooner because  the 
various opcodes do not need to be fully implemented in all tiers of the JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026341</commentid>
    <comment_count>1</comment_count>
      <attachid>235906</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-01 15:02:52 -0700</bug_when>
    <thetext>Created attachment 235906
work in progress

- Merged op_put_to_scope_with_profile and op_get_from_scope_with_profile into op_profile_types_with_high_fidelity by adding extra arguments to the opcode.
- Altered SymbolTable to use less memory by adding a rare data structure for type profiling.
- Created an interface to turn on and off type profiling.
- Refactored how I write to the log.
- deleted some unused code in HighFidelityLog.
- Implemented op_profile_types_with_high_fidelity in the baseline JIT by inlining the process of writing to the log and doing a small amount of type inference optimizations.

(This patch relies on https://bugs.webkit.org/show_bug.cgi?id=135358, therefore 135358 needs to land before this can land).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026357</commentid>
    <comment_count>2</comment_count>
      <attachid>235911</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-01 15:40:05 -0700</bug_when>
    <thetext>Created attachment 235911
work in progress

same patch as above, but using JumpList to emit faster assembly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028320</commentid>
    <comment_count>3</comment_count>
      <attachid>236403</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-11 14:31:20 -0700</bug_when>
    <thetext>Created attachment 236403
patch

- Merged op_put_to_scope_with_profile and op_get_from_scope_with_profile into
  op_profile_types_with_high_fidelity by adding extra arguments to the opcode.
- Altered SymbolTable to use less memory by adding a rare data structure for 
  type profiling.
- Created an interface to turn on and off type profiling from the Web
  Inspector.
- Refactored how entries are written to HighFidelityLog to make it
  easier to inline when generating machine code.
- Implemented op_profile_types_with_high_fidelity in the baseline JIT
  by inlining the process of writing to the log and doing a small amount
  of type inference optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028321</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-11 14:33:21 -0700</bug_when>
    <thetext>Attachment 236403 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:50:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:279:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:295:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JIT.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 31 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>1028326</commentid>
    <comment_count>5</comment_count>
      <attachid>236404</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-11 14:39:30 -0700</bug_when>
    <thetext>Created attachment 236404
patch

Fixed webkit-style bugs from the previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028344</commentid>
    <comment_count>6</comment_count>
      <attachid>236404</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-11 16:10:43 -0700</bug_when>
    <thetext>Comment on attachment 236404
patch

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

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:285
&gt; +    // If JavaScript is running, it&apos;s not safe to recompile, since we&apos;ll end
&gt; +    // up throwing away code that is live on the stack.
&gt; +    if (vm.entryScope) {
&gt; +        vm.entryScope-&gt;setEntryScopeDidPopListener(this,
&gt; +            [] (VM&amp; vm, JSGlobalObject*) 
&gt; +            {
&gt; +                recompileAllJSFunctionsForTypeProfiling(vm, true); 
&gt; +            }
&gt; +        );
&gt; +    } else
&gt; +        recompileAllJSFunctionsForTypeProfiling(vm, true);

This code is duplicated in enable/disable, it could move to a helper to avoid redundancy. Perhaps: setHighFidelityTypeProfilingEnabled(bool).

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:288
&gt; +void InspectorRuntimeAgent::disableHighFidelityTypeProfiling(ErrorString*)

We should clear this state when the inspector disconnects so as to leave the VM in a pristine state. I would suggest:

  1. Give RuntimeAgent a member bool that says if this is enabled / disabled
  2. RuntimeAgent::willDestroyFrontendAndBackend should call in some was call disableHighFidelityTypeProfiling if if this was enabled and the destroy reason is NOT InspectorDisconnectReason::InspectedTargetDestroyed (as there is no need to recompile in this case)

&gt; Source/JavaScriptCore/runtime/VM.cpp:865
&gt; +void VM::enableHighFidelityTypeProfiling()
&gt; +{
&gt; +    if (isProfilingTypesWithHighFidelity())
&gt; +        return;
&gt; +
&gt; +    m_highFidelityTypeProfiler = std::make_unique&lt;HighFidelityTypeProfiler&gt;();
&gt; +    m_highFidelityLog = std::make_unique&lt;HighFidelityLog&gt;();
&gt; +}

I think this needs to use a counter. Take the case of inspecting two different JSContext objects that share the same JSVirtualMachine. If you inspect both, enable type profiling on both, then disable on one, it will in an unbalanced way disable for the entire VM even though it should still be needed by a JSContext in the VM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028346</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-11 16:12:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt;   2. RuntimeAgent::willDestroyFrontendAndBackend should call in some was call disableHighFidelityTypeProfiling if if this was enabled and the destroy reason is NOT InspectorDisconnectReason::InspectedTargetDestroyed (as there is no need to recompile in this case)

Clarification:

  2. RuntimeAgent:: willDestroyFrontendAndBackend should call disableHighFidelityTypeProfiling if type profiling was enabled and the destroy reason is NOT InspectedTargetDestroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028350</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-11 16:26:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt;   2. RuntimeAgent::willDestroyFrontendAndBackend should call in some was call disableHighFidelityTypeProfiling if if this was enabled and the destroy reason is NOT InspectorDisconnectReason::InspectedTargetDestroyed (as there is no need to recompile in this case)
&gt; 
&gt; Clarification:
&gt; 
&gt;   2. RuntimeAgent:: willDestroyFrontendAndBackend should call disableHighFidelityTypeProfiling if type profiling was enabled and the destroy reason is NOT InspectedTargetDestroyed.

Okay. This is what I&apos;ve done. I&apos;ve also had all the subclasses on InspectorRuntimeAgent call into InspecorRuntimeAgent::willDestroyFrontendAndBackend. Do you think that&apos;s a good approach?

Thanks for the other fedback too, I&apos;ll implement those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028381</commentid>
    <comment_count>9</comment_count>
      <attachid>236421</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-11 17:56:52 -0700</bug_when>
    <thetext>Created attachment 236421
patch

Took Joe&apos;s suggestions into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028390</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-11 18:20:43 -0700</bug_when>
    <thetext>Attachment 236421 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 2 in 35 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>1028680</commentid>
    <comment_count>11</comment_count>
      <attachid>236487</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-12 17:27:02 -0700</bug_when>
    <thetext>Created attachment 236487
patch

Fixed style changes from previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028946</commentid>
    <comment_count>12</comment_count>
      <attachid>236487</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-13 16:14:37 -0700</bug_when>
    <thetext>Comment on attachment 236487
patch

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

Looks solid, but I think I spotted a bug or two, and this could use some refinement before landing.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        - Merged op_put_to_scope_with_profile and op_get_from_scope_with_profile into
&gt; +          op_profile_types_with_high_fidelity by adding extra arguments to the opcode.

Does &quot;_with_high_fidelity&quot; add anything here? We try to keep opcodes short, so they can dump like assembly code. How about &quot;op_profile_type&quot;? That has nice symmetry with our other &quot;op_profile&quot; opcodes.

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        - Refactored how entries are written to HighFidelityLog to make it
&gt; +          easier to inline when generating machine code.

Seems like this should be named something like &quot;TypeLog&quot;. Fidelity is an adjective -- we want a noun to name a thing.

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +        * bytecode/BytecodeList.json:
&gt; +        * bytecode/BytecodeUseDef.h:

It&apos;s good to fill out this line-by-line template with details of why you did something in a certain way, which might not be obvious to a reader.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1719
&gt; +        if (m_vm-&gt;isProfilingTypesWithHighFidelity()) {
&gt; +            ConcurrentJITLocker locker(symbolTable-&gt;m_lock);
&gt; +            symbolTable-&gt;prepareForHighFidelityTypeProfiling(locker);
&gt; +        }

Same comment here about &quot;WithHighFidelity&quot;.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2021
&gt; +                    // This must be called because there is a chance we may grab a Symbol Table that hasn&apos;t been prepared for profiling from an outer scope.

Better than what in a comment is why: &quot;If our parent scope was created while profiling was disabled, it will not have prepared for profiling yet.&quot;

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2035
&gt; +                symbolTable = m_symbolTable.get();
&gt;                  ConcurrentJITLocker locker(symbolTable-&gt;m_lock);
&gt; -                globalVariableID = symbolTable-&gt;uniqueIDForRegister(locker, virtualRegister.offset(), *vm());
&gt; -                globalTypeSet = symbolTable-&gt;globalTypeSetForRegister(locker, virtualRegister.offset(), *vm());
&gt; +                globalVariableID = symbolTable-&gt;uniqueIDForRegister(locker, profileRegister.offset(), *vm());
&gt; +                globalTypeSet = symbolTable-&gt;globalTypeSetForRegister(locker, profileRegister.offset(), *vm());
&gt;                  break;

Why don&apos;t we need prepareForHighFidelityTypeProfiling here?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:124
&gt; -    if (m_codeBlock-&gt;symbolTable())
&gt; +    if (m_codeBlock-&gt;symbolTable()) {
&gt; +        if (m_codeBlock-&gt;vm()-&gt;isProfilingTypesWithHighFidelity()) {
&gt; +            ConcurrentJITLocker locker(m_codeBlock-&gt;symbolTable()-&gt;m_lock);
&gt; +            m_codeBlock-&gt;symbolTable()-&gt;prepareForHighFidelityTypeProfiling(locker);
&gt; +        }
&gt;          m_codeBlock-&gt;setSymbolTable(m_codeBlock-&gt;symbolTable()-&gt;cloneCapturedNames(*m_codeBlock-&gt;vm()));
&gt; +    }

Why do we do this both during bytecode generation and during CodeBlock linking? It seems like we should only need one or the other.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:141
&gt; +    RegisterID* ret = generator.moveToDestinationIfNeeded(dst, generator.thisRegister());

We usually call this &quot;result&quot; rather than &quot;ret&quot;.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:173
&gt; +    RegisterID* ret = generator.emitGetFromScope(finalDest, scope.get(), m_ident, ThrowIfNotFound);

Ditto.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:302
&gt; +            [=] (VM&amp; vm, JSGlobalObject*) 
&gt; +            {

Brace should be on line above.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1387
&gt; +    // Store the JSValue on the log entry.
&gt; +    emitGetVirtualRegister(valueToProfile, regT0);
&gt; +    store64(regT0, Address(regT1, HighFidelityLog::LogEntry::valueOffset()));

I believe that emitGetVirtualRegister attempts to reuse regT0, without reloading from the stack, if the last bytecode put its result in regT0. So, you might sometimes get garbage results by using regT0 and then calling emitGetVirtualRegister for regT0. Usually, we work around this by doing the emitGetVirtualRegister as the first thing in the opcode.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1925
&gt; +void JIT_OPERATION operationClearHighFidelityTypeProfilerLog(ExecState* exec)

&quot;clear&quot; made me think that this function would delete the log. But then this function called a function named &quot;process&quot;, which seems to consume the log, rather than just throwing it away. A good general rule is that if function A just calls through to function B, they should not have substantially different names. If they do, you have given two names to one thing, which defeats the purpose of naming.

I&apos;d call this &quot;operationProcessTypeLog&quot;, and the function it calls &quot;exec-&gt;vm().typeLog().process()&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028949</commentid>
    <comment_count>13</comment_count>
      <attachid>236487</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-13 16:22:21 -0700</bug_when>
    <thetext>Comment on attachment 236487
patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1995
&gt; +            // The format of this instruciton is: op_profile_types_with_high_fidelity regToProfile, TypeLocation*, flag, identifier?, resolveType?

typo: instruction. But I think you can just mimic the other cases and drop the sentence fragment altogether.

&gt; Source/WebCore/ChangeLog:8
&gt; +        This patch has various subclasses of InspectorRuntimeAgent call their

I can see that. But why is this necessary (apropos the rest of the patch)? That is what you should write here.

&gt; Source/WebCore/ChangeLog:11
&gt; +        This just calls a super class&apos;s method, no need to test it.

You can omit this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028981</commentid>
    <comment_count>14</comment_count>
      <attachid>236487</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-13 17:36:38 -0700</bug_when>
    <thetext>Comment on attachment 236487
patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:21
&gt;&gt; +        * bytecode/BytecodeUseDef.h:
&gt; 
&gt; It&apos;s good to fill out this line-by-line template with details of why you did something in a certain way, which might not be obvious to a reader.

Do you mean to do this when submitting a patch for review?

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1995
&gt;&gt; +            // The format of this instruciton is: op_profile_types_with_high_fidelity regToProfile, TypeLocation*, flag, identifier?, resolveType?
&gt; 
&gt; typo: instruction. But I think you can just mimic the other cases and drop the sentence fragment altogether.

I think I did this because Fil advocated for comments being full sentences, but I&apos;m not against mimicking the other instances of these comments.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2035
&gt;&gt;                  break;
&gt; 
&gt; Why don&apos;t we need prepareForHighFidelityTypeProfiling here?

Because we do  prepareForHighFidelityTypeProfiling for this CodeBlock&apos;s symbolTable at the beginning of the top of this function, that way we don&apos;t repeat calls for this CodeBlock&apos;s symbolTable.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:124
&gt;&gt; +    }
&gt; 
&gt; Why do we do this both during bytecode generation and during CodeBlock linking? It seems like we should only need one or the other.

Indeed. We can probably just do it during bytecode generation time.
I also think we can get away with cloning captured names in the symbol table just once as well.

&gt;&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:141
&gt;&gt; +    RegisterID* ret = generator.moveToDestinationIfNeeded(dst, generator.thisRegister());
&gt; 
&gt; We usually call this &quot;result&quot; rather than &quot;ret&quot;.

Okay. Should I go through an retroactively fix the other places where I used ret?

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:302
&gt;&gt; +            {
&gt; 
&gt; Brace should be on line above.

check-webkit-style complains about lambda&apos;s having their brace on the line they&apos;re declared on. Should I do it anyway?

&gt;&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1387
&gt;&gt; +    store64(regT0, Address(regT1, HighFidelityLog::LogEntry::valueOffset()));
&gt; 
&gt; I believe that emitGetVirtualRegister attempts to reuse regT0, without reloading from the stack, if the last bytecode put its result in regT0. So, you might sometimes get garbage results by using regT0 and then calling emitGetVirtualRegister for regT0. Usually, we work around this by doing the emitGetVirtualRegister as the first thing in the opcode.

Okay, this is good to know, thanks.

&gt;&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1925
&gt;&gt; +void JIT_OPERATION operationClearHighFidelityTypeProfilerLog(ExecState* exec)
&gt; 
&gt; &quot;clear&quot; made me think that this function would delete the log. But then this function called a function named &quot;process&quot;, which seems to consume the log, rather than just throwing it away. A good general rule is that if function A just calls through to function B, they should not have substantially different names. If they do, you have given two names to one thing, which defeats the purpose of naming.
&gt; 
&gt; I&apos;d call this &quot;operationProcessTypeLog&quot;, and the function it calls &quot;exec-&gt;vm().typeLog().process()&quot;.

I agree, this is badly named.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028982</commentid>
    <comment_count>15</comment_count>
      <attachid>236487</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-13 17:38:37 -0700</bug_when>
    <thetext>Comment on attachment 236487
patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +          op_profile_types_with_high_fidelity by adding extra arguments to the opcode.
&gt; 
&gt; Does &quot;_with_high_fidelity&quot; add anything here? We try to keep opcodes short, so they can dump like assembly code. How about &quot;op_profile_type&quot;? That has nice symmetry with our other &quot;op_profile&quot; opcodes.

Will land renaming all HighFidelity__ in this patch:
https://bugs.webkit.org/show_bug.cgi?id=135899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028983</commentid>
    <comment_count>16</comment_count>
      <attachid>236487</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-13 17:39:53 -0700</bug_when>
    <thetext>Comment on attachment 236487
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:124
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Why do we do this both during bytecode generation and during CodeBlock linking? It seems like we should only need one or the other.
&gt; 
&gt; Indeed. We can probably just do it during bytecode generation time.
&gt; I also think we can get away with cloning captured names in the symbol table just once as well.

I wrote this before we spoke in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029023</commentid>
    <comment_count>17</comment_count>
      <attachid>236577</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-13 21:29:30 -0700</bug_when>
    <thetext>Created attachment 236577
patch

Took Geoff and Brian&apos;s recommendations into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029024</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-13 21:31:03 -0700</bug_when>
    <thetext>Attachment 236577 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:301:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 36 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>1029139</commentid>
    <comment_count>19</comment_count>
      <attachid>236577</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-14 11:00:34 -0700</bug_when>
    <thetext>Comment on attachment 236577
patch

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

Inspector parts look good to me now!

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1135
&gt; +    instructions().append(0);

Nit: nullptr instead of 0?

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:260
&gt; +    bool needsToRecompile;
&gt; +    if (shouldEnableTypeProfiling)
&gt; +        needsToRecompile = vm.enableHighFidelityTypeProfiling();
&gt; +    else
&gt; +        needsToRecompile = vm.disableHighFidelityTypeProfiling();

Nit: You can one line this with a ternary to avoid the awkward uninitialized bool.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:271
&gt; +    if (reason == InspectorDisconnectReason::InspectorDestroyed &amp;&amp; m_isTypeProfilingEnabled)

Nit: I think it might be clearer if this was: &quot;reason != InspectorDisconnectReason::InspectedTargetDestroyed&quot;. Since that is at a high level the case we really care about here.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:278
&gt; +    if (m_isTypeProfilingEnabled)
&gt; +        return;

Nit: This check can go inside setHighFidelityTypeProfilingEnabledState.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:286
&gt; +    if (!m_isTypeProfilingEnabled)
&gt; +        return;

Nit: This check can go inside setHighFidelityTypeProfilingEnabledState.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h:91
&gt; +    void setHighFidelityTypeProfilingEnabledState(bool);

Style: Throw a newline between the private function and member variables.

&gt; Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.cpp:55
&gt; +    InspectorRuntimeAgent::willDestroyFrontendAndBackend(reason);

Style: Put a newline before this as these are really separate things.

&gt; Source/JavaScriptCore/jit/JIT.cpp:506
&gt; +        m_vm-&gt;highFidelityLog()-&gt;processHighFidelityLog(&quot;Preparing for JIT compilation.&quot;);

Nit: Since this is a string literal being converted into a WTF::String you could use ASCIILiteral:
&lt;http://trac.webkit.org/wiki/EfficientStrings&gt;

    processHighFidelityLog(ASCIILiteral(&quot;Preparing for JIT compilation.&quot;));

Likewise in other places.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1395
&gt; +    // Incremement the current log entry.

Typo: &quot;Incremement&quot; =&gt; &quot;Increment&quot;

&gt; Source/JavaScriptCore/runtime/VM.cpp:903
&gt; +    for (Bag&lt;TypeLocation&gt;::iterator iter = m_typeLocationInfo-&gt;begin(); !!iter; ++iter) {

Isn&apos;t just &quot;iter&quot; enough instead of &quot;!!iter&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029150</commentid>
    <comment_count>20</comment_count>
      <attachid>236577</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-14 11:33:40 -0700</bug_when>
    <thetext>Comment on attachment 236577
patch

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

Thanks for the feedback, other changes taken into account.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1135
&gt;&gt; +    instructions().append(0);
&gt; 
&gt; Nit: nullptr instead of 0?

I&apos;ve chosen 0 to be consistent with the other code in this file.

&gt;&gt; Source/JavaScriptCore/runtime/VM.cpp:903
&gt;&gt; +    for (Bag&lt;TypeLocation&gt;::iterator iter = m_typeLocationInfo-&gt;begin(); !!iter; ++iter) {
&gt; 
&gt; Isn&apos;t just &quot;iter&quot; enough instead of &quot;!!iter&quot;?

I think !!iter is used when iterating over a Bag&lt;T&gt; because that class implements operator !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029155</commentid>
    <comment_count>21</comment_count>
      <attachid>236605</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-14 11:46:06 -0700</bug_when>
    <thetext>Created attachment 236605
patch

Joe&apos;s comments taken into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029157</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 11:49:00 -0700</bug_when>
    <thetext>Attachment 236605 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:293:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 36 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>1029262</commentid>
    <comment_count>23</comment_count>
      <attachid>236605</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-14 16:31:40 -0700</bug_when>
    <thetext>Comment on attachment 236605
patch

r=me, with renaming in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029264</commentid>
    <comment_count>24</comment_count>
      <attachid>236605</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 16:59:58 -0700</bug_when>
    <thetext>Comment on attachment 236605
patch

Clearing flags on attachment: 236605

Committed r172614: &lt;http://trac.webkit.org/changeset/172614&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029265</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 17:00:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235906</attachid>
            <date>2014-08-01 15:02:52 -0700</date>
            <delta_ts>2014-08-01 15:40:05 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>75975</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw3IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3RoIiA6IDMgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6IDYg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0aCIg
OiA4IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZV93aXRoX3By
b2ZpbGUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0
X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNCB9LApAQCAtMTIy
LDcgKzEyMCw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9k
aWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5k
IiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6
IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxNzE5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldCgKICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRf
b2ZfbGluZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9w
X3B1dF9ieV9pZDoKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKQEAgLTEyMyw3ICsxMjIsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKLSAgICBjYXNl
IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Nj
b3BlOgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgpA
QCAtMjUxLDcgKzI0OSw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmwKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKICAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKLSAgICBjYXNlIG9wX3B1dF90b19zY29w
ZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6CiAgICAgY2FzZSBvcF9lbmQ6
CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTMyMSw3ICszMTgsNiBAQCB2b2lk
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9uZXdfZnVu
Y19leHA6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnczoKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2Nh
bGxfZXZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMyw3ICsxNTMzLDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICAgICBvcGVyYW5kKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwpAQCAtMTU0Miw4ICsxNTQxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZSgKICAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVyZQogICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFuZAogICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX3Njb3Bl
Iik7Ci0gICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGUpCi0gICAgICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMsICV1PCVzfCVzPiwgPHN0cnVjdHVyZT4sICVkIiwKICAgICAgICAgICAgICAgICByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLAogICAgICAgICAgICAgICAgIG1vZGVBbmRUeXBlLm9w
ZXJhbmQoKSwgcmVzb2x2ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1vZGUoKSksIHJlc29sdmVUeXBl
TmFtZShtb2RlQW5kVHlwZS50eXBlKCkpLApAQCAtMTcyNiw2ICsxNzIzLDExIEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBib29sIGRpZENsb25lU3ltYm9s
VGFibGUgPSBmYWxzZTsKICAgICAKICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
dW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fdm0tPmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgc3lt
Ym9sVGFibGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3lt
Ym9sVGFibGUtPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1
cmVkTmFtZXMoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OwpAQCAtMTk2NSwxMyArMTk2NywxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBjWzBdLnUub3Bjb2RlID09IG9w
X2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSA/IDIgOiAxKTsKLSAgICAgICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BMZW5ndGggLSBvZmZzZXRd
LnUub3BlcmFuZF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1
ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIEFTU0VS
VChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAgICAgICAgICAgIHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExl
bmd0aCAtIG9mZnNldF0gPSBwcm9maWxlOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDFdID0gcHJvZmlsZTsKIAogICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUg
ZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCiAg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5v
cGVyYW5kKTsKQEAgLTE5ODUsMTYgKzE5ODUsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0
cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBv
cF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUg
Zm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IGdldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmls
ZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQs
IC4uLiwgVHlwZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zm
c2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZz
ZXQpOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgOF0udS5sb2NhdGlvbiA9IGxv
Y2F0aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ug
b3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlk
LCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
OwpAQCAtMjAxMSwzMCArMjAwNCw1MCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVy
ZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBvcF9wdXRf
dG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBv
ZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBp
ZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9j
YXRpb24qCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9w
TGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2Nv
cGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OiB7CisgICAgICAgICAgICAvLyBU
aGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y2l0b24gaXM6IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmll
cj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0g
aSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90
RW5kOwogICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEOwogICAg
ICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CiAgICAgICAgICAgICBib29s
IHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVF
eHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKHBjWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwotCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2FzdDxQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKwogICAgICAgICAg
ICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
UHV0VG9TY29wZToKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9t
U2NvcGU6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50
aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBl
ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgKGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0
ZWNvZGVHZXRGcm9tU2NvcGUgPyBHZXQgOiBQdXQpLCB0eXBlKTsKKworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBhbHNv
IGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGUgZ2xvYmFsSUQKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM1MTg0CisgICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9u
LT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xv
YmFsVmFyKQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0
LmdldCgpLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBtdXN0IGJlIGNhbGxlZCBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHdlIG1heSBncmFi
IGEgU3ltYm9sIFRhYmxlIHRoYXQgaGFzbid0IGJlZW4gcHJlcGFyZWQgZm9yIHByb2ZpbGluZyBm
cm9tIGFuIG91dGVyIHNjb3BlLgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJl
cGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxl
KGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwg
aWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3Rz
OworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQ6IHsKKyAgICAgICAgICAgICAgICBz
eW1ib2xUYWJsZSA9IG1fc3ltYm9sVGFibGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxv
Y2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAg
Z2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9j
a2VyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBn
bG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2Vy
LCBwcm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9i
YWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihsb2NrZXIs
IHByb2ZpbGVSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURv
ZXNOb3RIYXZlR2xvYmFsSUQ6IApAQCAtMjA1OSw3ICsyMDcyLDggQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWly
ID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCkt
PmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELCBtX293bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsIHZtKCkpOworICAg
ICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZt
KCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRU
eXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKKyAgICAgICAgICAgICAgICBtX293bmVyRXhl
Y3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQs
IHZtKCkpOwogICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGxvY2F0aW9uUGFp
ci5maXJzdDsKICAgICAgICAgICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5z
ZWNvbmQ7CiAKQEAgLTI1NDMsOSArMjU1Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6Ci0gICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAg
ICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgICAgIFJlc29s
dmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9CiAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVN
b2RlQW5kVHlwZShjdXJJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwpAQCAtMzk1NSwzNSArMzk2
Nyw0IEBAIERGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJpbGkKIH0KICNlbmRp
ZgogCi1UeXBlTG9jYXRpb24qIENvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29s
dmVPcCBvcCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNl
dCkKLXsKLSAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKLSAgICBib29sIHNob3Vs
ZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNz
aW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7Ci0gICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEOwotICAgIFJl
ZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OwotCi0gICAgLy8gRklYTUU6IGhhbmRsZSBvdGhl
ciB2YWx1ZXMgZm9yIG9wLnR5cGUgaGVyZSwgYW5kIGFsc28gY29uc2lkZXIgd2hhdCB0byBkbyB3
aGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSBnbG9iYWxJRAotICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7Ci0gICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3Vy
ZVZhcikgCi0gICAgICAgIHN5bWJvbFRhYmxlID0gb3AuYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUo
KTsKLSAgICBlbHNlIGlmIChvcC50eXBlID09IEdsb2JhbFZhcikKLSAgICAgICAgc3ltYm9sVGFi
bGUgPSBtX2dsb2JhbE9iamVjdC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKLSAgICAKLSAgICBpZiAo
c3ltYm9sVGFibGUpIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7Ci0gICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+
dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwotICAgICAg
ICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShs
b2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwotICAgIH0gZWxzZQotICAgICAgICBnbG9iYWxW
YXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKLQotICAgIHN0ZDo6cGFp
cjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2Jh
bFZhcmlhYmxlSUQsIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9IGxvY2F0aW9uUGFpci5maXJzdDsKLSAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlv
blBhaXIuc2Vjb25kOwotCi0gICAgaWYgKHNob3VsZEFuYWx5emUgJiBpc05ld0xvY2F0aW9uKQot
ICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRp
b24obG9jYXRpb24pOwotCi0gICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyMiw4ICsxMDIyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwogICAgIH0KIAot
ICAgIFR5cGVMb2NhdGlvbiogc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVPcCwgY29uc3Qg
SWRlbnRpZmllciYsIHNpemVfdCk7Ci0gICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHJl
c2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAg
IHZvaWQgcmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlw
ZUxvY2F0aW9uLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9UeXBlTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBUeXBlTG9jYXRpb25faAogCiAjaW5jbHVkZSAiVHlwZVNldC5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDE0ICs0MiwxNiBAQCB0
eXBlZGVmIGludHB0cl90IEdsb2JhbFZhcmlhYmxlSUQ7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgVHlwZUxvY2F0aW9uKCkgCi0gICAgICAgIDogbV9kaXZvdEZvckZ1bmN0
aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQoVUlOVF9NQVgpCisgICAgVHlwZUxvY2F0aW9uKCkK
KyAgICAgICAgOiBtX2xhc3RTZWVuVHlwZShUeXBlTm90aGluZykKKyAgICAgICAgLCBtX2Rpdm90
Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkKICAgICAgICAgLCBt
X2luc3RydWN0aW9uVHlwZVNldChUeXBlU2V0OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2dsb2Jh
bFR5cGVTZXQobnVsbHB0cikKICAgICB7CiAgICAgfQogCiAgICAgR2xvYmFsVmFyaWFibGVJRCBt
X2dsb2JhbFZhcmlhYmxlSUQ7CisgICAgUnVudGltZVR5cGUgbV9sYXN0U2VlblR5cGU7CiAgICAg
aW50cHRyX3QgbV9zb3VyY2VJRDsKICAgICB1bnNpZ25lZCBtX2Rpdm90U3RhcnQ7CiAgICAgdW5z
aWduZWQgbV9kaXZvdEVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzE5MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDggKzExNSwxMyBAQCBQYXJzZXJFcnJvciBCeXRl
Y29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQo
KTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICBpZiAobV9jb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT52bSgpLT5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5wcmVwYXJlRm9ySGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CiAgICAgICAgIG1fY29kZUJs
b2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0
dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgIH0KIAogICAgIGlmIChtX2V4cHJl
c3Npb25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91
dE9mTWVtb3J5KTsKQEAgLTEwMDUsNyArMTAxMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TW92ZSgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHdhdGNoYWJs
ZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogCiAgICAgaWYgKCFkc3QtPmlzVGVtcG9yYXJ5KCkg
JiYgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2Jh
bElEKTsKKyAgICAgICAgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9m
aWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKIAogICAgIHJldHVybiBkc3Q7
CiB9CkBAIC0xMTI0LDEyICsxMTI5LDE1IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRI
aWdoRmlkZWxpdHkKICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVF
eHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lz
dGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0
ZWNvZGVGbGFnIGZsYWcpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnLCBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudGlmaWVyKQogeworICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjaXRvbiBpczog
b3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkgcmVnVG9Qcm9maWxlLCBUeXBlTG9j
YXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/CiAgICAgZW1pdE9wY29kZShv
cF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlZ2lzdGVyVG9Qcm9maWxlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIFR5cGVMb2NhdGlvbiBv
YmplY3QgcG9pbnRlci4KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGZsYWcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpZGVudGlm
aWVyID8gYWRkQ29uc3RhbnQoKmlkZW50aWZpZXIpIDogMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVUeXBlKCkpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCkBAIC0xMjcxLDIyICsxMjc5LDYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcgogICAgIHJldHVybiBk
c3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNjb3Bl
V2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9j
b2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKLQotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVy
KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZl
TW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMg
aXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRpb24gcG9pbnRlci4KLSAgICByZXR1cm4g
ZHN0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKICAgICBtX2NvZGVCbG9jay0+
YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MTMwMiwyMSArMTI5NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
VG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUgcmVzb2x2
ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUo
KSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhp
cyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2ludGVyLgotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5j
ZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQ
cm90b3R5cGUpCiB7IAogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxMiArMjIw
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUcnlEYXRhKiB0cnlEYXRhOwogICAgIH07
CiAKLSAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeyAK
KyAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeworICAg
ICAgICBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsCisgICAgICAgIFByb2ZpbGVUeXBl
c0J5dGVjb2RlR2V0RnJvbVNjb3BlLAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0ds
b2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
CiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudCwKICAgICAgICAg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3QsCi0gICAgICAgIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQgIAorICAgICAgICBQcm9maWxlVHlw
ZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50CiAgICAgfTsKIAogICAgIGNsYXNzIEJ5
dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTQwNyw3ICs0MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHBy
ZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGVuZERpdm90KTsKLSAgICAgICAgdm9pZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcpOworICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5Qnl0ZWNvZGVGbGFnLCBjb25zdCBJZGVudGlmaWVyKik7CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAtNDc0LDkgKzQ3Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZl
TW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVz
b2x2ZU1vZGUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9k
ZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0
ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2
ZU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCopOwog
ICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTcxOTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGdlbmVyYXRvci5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkobG9jYWwuZ2V0KCksIFByb2ZpbGVU
eXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGxvY2FsLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29k
ZUhhc0dsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKG1fcG9zaXRpb24sIEpTVGV4dFBvc2l0
aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1faWRlbnQubGVuZ3RoKCksIC0xKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgbG9jYWwuZ2V0KCkpOwpAQCAtMTYyLDEyICsxNjIsMTIgQEAgUmVnaXN0ZXJJRCogUmVz
b2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9z
dGFydCArIG1faWRlbnQubGVuZ3RoKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCwgbV9zdGFydCwgZGl2b3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbV9pZGVudCk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJlZ2lzdGVySUQqIGZpbmFs
RGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZmluYWxEZXN0LCBzY29wZS5nZXQoKSwg
bV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRH
ZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBz
Y29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVHZXRGcm9tU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0
UG9zaXRpb24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93
SWZOb3RGb3VuZCk7CisgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTM4Nyw3ICszODcs
NyBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0CiAgICAgUmVnaXN0
ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZpbmFsRGVzdCwgYmFzZS5n
ZXQoKSwgcHJvcGVydHkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51
bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1
cm4gcmV0OwpAQCAtNDEzLDcgKzQxMyw3IEBAIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0
ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLCBt
X2lkZW50KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFs
RGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lv
bkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsK
QEAgLTQ5Nyw3ICs0OTcsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVt
aXRCCiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2Fs
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQo
KSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAg
LTUxOCw3ICs1MTgsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1p
CiAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIgYnVp
bHQtaW4gY29uc3RydWN0b3JzLgogICAgICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3Iu
ZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
cmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9i
YWxJRCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXQ7CkBAIC01MzQsNyArNTM0LDcgQEAgUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgIGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQs
IFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRD
YWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQo
KSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAg
LTU1Myw3ICs1NTMsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1p
CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJh
c2UuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1
cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgp
LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCks
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC01
NzEsNyArNTcxLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dAog
ICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0
dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1
cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBu
dWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIHJldDsKQEAgLTY0NSw3ICs2NDUsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAg
ICB9CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShy
ZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJl
dHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC03NTksNyArNzU5LDcgQEAgUmVnaXN0ZXJJRCog
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGVuZC5nZXQoKSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwpAQCAtODE0LDExICs4MTQs
MTEgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9
IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2Nv
cGUuZ2V0KCksIGlkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBvbGRWYWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgZ2VuZXJhdG9y
LmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZO
b3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNj
b3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsK
KyAgICB9CiAKICAgICByZXR1cm4gb2xkVmFsdWUuZ2V0KCk7CiB9CkBAIC04NDIsNyArODQyLDcg
QEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dAogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2
YWx1ZS5nZXQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51
bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CkBA
IC04NjYsNyArODY2LDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXREb3QoQnl0ZWNv
ZAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRl
bnQsIHZhbHVlLmdldCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZl
R2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVl
KTsKQEAgLTEwMDIsMTEgKzEwMDIsMTEgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJl
c29sdmUoQnl0ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgaWRlbnQpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIGlkZW50LCBUaHJvd0lmTm90Rm91
bmQpOwogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBtX29wZXJhdG9y
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1
ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5v
dEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlIAotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwg
VGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgdmFsdWUuZ2V0KCkpOwogfQogCkBAIC0xMDI3LDcgKzEwMjcs
NyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCks
IHZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTA0OSw3ICsx
MDQ5LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29kZQogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVl
KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZh
bHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTUyMCwxMiArMTUyMCwx
MSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNj
b3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0KCksIG1fcmln
aHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBt
X3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlzKTsKLSAgICBSZWdpc3RlcklEKiByZXQ7
IAorICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5n
ZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBy
ZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgbV9p
ZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmVzdWx0LmdldCgpLCBQcm9maWxlVHlw
ZXNCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7
CisgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTE1NTksMTIgKzE1NTgsMTEgQEAgUmVn
aXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICBkc3QgPSAwOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3JpZ2h0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJlZ2lzdGVy
SUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwg
cmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQg
OiBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0
VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdl
bmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5v
dEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHJlc3VsdC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVu
dCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVz
dWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBE
b05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgfSAKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0x
NTc5LDcgKzE1NzcsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJl
c3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRSZXN1bHQpOwpAQCAtMTU5OCw3
ICsxNTk2LDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRCeXRlYwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFz
ZS5nZXQoKSwgbV9pZGVudCwgdXBkYXRlZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTE2MjQsNyArMTYyMiw3IEBAIFJlZ2lz
dGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWdpc3RlcklEKiBmb3J3
YXJkUmVzdWx0ID0gKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24ocmVzdWx0KSwgcmVzdWx0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpLCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNC
eXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0
aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAgLTE2NDQsNyArMTY0Miw3IEBAIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdXBkYXRl
ZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVw
ZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhw
cmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAKQEAgLTIyNTEs
NyArMjI0OSw3IEBAIHZvaWQgUmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2UKIAog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5SZWdpc3RlciA9IG1fdmFsdWUgPyBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3ZhbHVlKSA6IGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5k
ZWZpbmVkKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25S
ZXR1cm5TdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJhdG9yLnNjb3BlRGVwdGgoKSkgewpAQCAtMjU4
NCw3ICsyNTgyLDcgQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewog
ICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0LCAtMSk7
IC8vIFRoaXMgZGl2b3QgaXMgYXQgdGhlIG9wZW4gYnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLgogICAg
ICAgICBKU1RleHRQb3NpdGlvbiBlbmQoLTEsIG1fc3RhcnRTdGFydE9mZnNldCArIDEsIC0xKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGdlbmVy
YXRvci50aGlzUmVnaXN0ZXIoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmpl
Y3QpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
Z2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhp
c09iamVjdCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKHN0YXJ0LCBlbmQpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4K
QEAgLTI1OTIsNyArMjU5MCw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEJpbmRpbmdOb2Rl
KiBwYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KG1fcGFyYW1ldGVycy0+YXQo
aSkpOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCByZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dChpKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoJnJlZywgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQsIG51bGxwdHIpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
cGFyYW1ldGVyLT5kaXZvdFN0YXJ0KCksIHBhcmFtZXRlci0+ZGl2b3RFbmQoKSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNjE0LDcgKzI2MTIsNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmVt
aXRCeXRlY29kZShCeXRlCiAgICAgaWYgKCFyZXR1cm5Ob2RlKSB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIHIwID0gZ2VuZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/IGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSA6IGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxl
VHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsgLy8gRG8gbm90IGVtaXQgZXhw
cmVzc2lvbiBpbmZvIGZvciB0aGlzIHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNl
cidzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3Rh
dGVtZW50LCBudWxscHRyKTsgLy8gRG8gbm90IGVtaXQgZXhwcmVzc2lvbiBpbmZvIGZvciB0aGlz
IHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNlcidzIHNvdXJjZSBjb2RlLgogICAg
ICAgICBBU1NFUlQoc3RhcnRPZmZzZXQoKSA+PSBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwg
c3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dFJldHVybihyMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
NzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6U1NFMkNo
ZWNrUwogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC0yNjMsNiArMjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5jKQogICAgICAgICBERUZJ
TkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVf
d2lsbF9jYWxsKQorICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX25hbWVfc2NvcGUpCiAgICAgICAg
IERFRklORV9PUChvcF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X291dF9vZl9saW5lOgpAQCAtNTA4LDYgKzUxMCwxMCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OnByaXZhdGVDb21waWxlKEpJCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CiAKKyAgICAvLyBUaGlzIGVuc3Vy
ZXMgdGhhdCB3ZSBoYXZlIHRoZSBtb3N0IHVwIHRvIGRhdGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVu
IHBlcmZvcm1pbmcgdHlwZWNoZWNrIG9wdGltaXphdGlvbnMuCisgICAgaWYgKG1fdm0tPmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIG1fdm0tPmhpZ2hGaWRlbGl0
eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxh
dGlvbi4iKTsKKwogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRv
IHRoZSBjb2RlZ2VuCiAgICAgaWYgKG1fcmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkK
ICAgICAgICAgbm9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3
MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyNiw2ICs1MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2luYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2Fs
bChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwo
SW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX25h
bWVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1c2hfd2l0aF9z
Y29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0aW9uKik7CkBAIC02NDYsNiArNjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBS
ZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0
KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwOCw2ICsxMzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4X3N0
cmluZyhJbnN0cnUKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlk
ZWxpdHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCkBAIC00MSw2ICs0Miw3IEBACiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1Bh
dGhDYWxsLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTMzOCw2ICsxMzQwLDcyIEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnUKICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4
X3N0cmluZyk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51LmxvY2F0aW9uOworICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wIHNraXBKdW1wVG9F
bmRMYWJlbCA9IGp1bXAoKTsKKworICAgIExhYmVsIGp1bXBUb0VuZExhYmVsID0gbGFiZWwoKTsK
KyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKworICAgIHNraXBKdW1wVG9FbmRMYWJlbC5saW5rKHRo
aXMpOworCisgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9z
c2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCisgICAgLy8g
VGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0
IEpTVmFsdWUgdHlwZSBjaGVja3MuCisgICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpLmxpbmtUbyhq
dW1wVG9FbmRMYWJlbCwgdGhpcyk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24t
Pm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLmxpbmtUbyhqdW1w
VG9FbmRMYWJlbCwgdGhpcyk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKSB7CisgICAgICAgIC8vIEpTQ0pTVmFsdWU6Omlz
Qm9vbGVhbiA9PiByZXR1cm4gKHUuYXNJbnQ2NCAmIH4xKSA9PSBWYWx1ZUZhbHNlOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAg
IGFuZDY0KFRydXN0ZWRJbW0zMih+MSksIHJlZ1QwKTsKKyAgICAgICAgYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoVmFsdWVGYWxzZSkpLmxpbmtUbyhqdW1wVG9FbmRMYWJlbCwg
dGhpcyk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBl
ID09IFR5cGVNYWNoaW5lSW50KSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIo
cmVnVDApLmxpbmtUbyhqdW1wVG9FbmRMYWJlbCwgdGhpcyk7CisgICAgfSBlbHNlIGlmIChjYWNo
ZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBl
bWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKHJlZ1QwKS5saW5rVG8oanVtcFRvRW5kTGFiZWwsIHRo
aXMpOworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlU3RyaW5nKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1By
b2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlND
ZWxsKHJlZ1QwKTsKKyAgICAgICAgYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkubGlua1Rv
KGp1bXBUb0VuZExhYmVsLCB0aGlzKTsKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgfQorCisgICAgSGlnaEZpZGVsaXR5TG9nKiBjYWNoZWRIaWdoRmlkZWxpdHlMb2cgPSBtX3Zt
LT5oaWdoRmlkZWxpdHlMb2coKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkSGlnaEZp
ZGVsaXR5TG9nKSwgcmVnVDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdDIgPC0gaGlnaEZpZGVsaXR5TG9nCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBIaWdoRmlkZWxpdHlMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHQxIDwtIG5leHQgbG9nIGVudHJ5CisKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdDAgPC0gdHlw
ZUxvY2F0aW9uCisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5
TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHQxLmxvY2F0aW9uIDwtIHQwCisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdDAgPC0gSlNWYWx1ZSB0byBwcm9maWxlCisgICAgc3RvcmU2NChy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZz
ZXQoKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHQxLnZhbHVlIDwtIHQwCisKKyAg
ICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdDAgPC0gdDAuc3RydWN0dXJl
SUQKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlMb2c6Okxv
Z0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7ICAgICAgICAgICAgICAgICAgICAgLy8gdDEu
c3RydWN0dXJlSUQgPSB0MAorICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKKyAgICBub3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVn
VDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsgICAg
ICAgICAgIC8vIHQxLnN0cnVjdHVyZUlEID0gMAorICAgIHNraXBJc0NlbGwubGluayh0aGlzKTsK
KworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50
cnkpKSwgcmVnVDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0MSA8
LSB0MSArIHNpemVvZihMb2dFbnRyeSkKKyAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBIaWdoRmlkZWxpdHlMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdDIuY3VycmVudExvZ0VudHJ5IDwtIHQxCisgICAgSnVtcCBza2lw
Q2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hl
ZEhpZ2hGaWRlbGl0eUxvZy0+bG9nRW5kUHRyKCkpKTsgIC8vIHNraXBDbGVhckxvZyA8LSB0MSAh
PSBsb2dFbmQKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNsZWFySGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyTG9nKTsKKyAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKKworICAgIGVuZC5s
aW5rKHRoaXMpOworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgogI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhvc3RD
YWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtMTkxMCw2ICsxOTExLDExIEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3QKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOwogfQogCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2xlYXJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXJMb2co
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5TG9nKCktPnBy
b2Nlc3NIaWdoRmlkZWxpdHlMb2coIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNpZGUgYmFzZWxp
bmUgSklUIik7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgogCiAvLyBOb3RlOiBnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0R2VuZXJpCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
eHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90
KTsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNsZWFySGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyTG9nKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRlcm4gIkMiCiAK
IGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtGb3IoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiwxNSArNTMyLDYgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25ld19yZWdleAogICAgIExMSU5UX1JFVFVSTihSZWdFeHBPYmplY3Q6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnRXhwKSk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSBwY1syXS51LmxvY2F0aW9uOwotICAgIEpTVmFsdWUgdmFsID0g
TExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29y
ZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbCwgbG9jYXRpb24pOwotICAgIExMSU5UX0VO
RF9JTVBMKCk7Ci19Ci0KIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jaGVja19oYXNf
aW5zdGFuY2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTEzNjYsOCArMTM1NywxMCBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zCiAgICAgTExJTlRfUkVUVVJO
KEpTU2NvcGU6OnJlc29sdmUoZXhlYywgZXhlYy0+c2NvcGUoKSwgaWRlbnQpKTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rp
b24qIHBjLCBWTSYgdm0pCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21f
c2NvcGUpCiB7CisgICAgTExJTlRfQkVHSU4oKTsKKwogICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUCgyKS5qc1ZhbHVl
KCkpOwogICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQp
OwpAQCAtMTM3NSw4ICsxMzY4LDggQEAgc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9u
KEV4ZWNTdAogICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKICAgICBpZiAoIXNjb3BlLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7CiAgICAgICAgIGlmIChtb2RlQW5k
VHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCkpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IExMSU5UX1JFVFVSTihleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKSk7CisgICAgICAgIExMSU5UX1JFVFVSTihq
c1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4g
U2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4n
dCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KQEAgLTEzOTMsMjcgKzEz
ODYsMTMgQEAgc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4ZWNTdAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpCi17Ci0gICAg
TExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4
ZWMsIHBjLCB2bSk7Ci0gICAgTExJTlRfUkVUVVJOKHZhbHVlKTsKKyAgICBMTElOVF9SRVRVUk4o
c2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKQorTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBnZXRGcm9tU2NvcGVDb21tb24oZXhlYywgcGMsIHZtKTsKLSAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gcGNbOF0udS5sb2NhdGlvbjsKLSAgICB2bS5oaWdoRmlkZWxp
dHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsdWUsIGxvY2F0aW9u
KTsKLSAgICBMTElOVF9SRVRVUk4odmFsdWUpOwotfQogCi1zdGF0aWMgSlNPYmplY3QqIHB1dFRv
U2NvcGVDb21tb24oRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIFZNJiB2bSkKLXsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFu
ZCk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoMSku
anNWYWx1ZSgpKTsKQEAgLTE0MjEsMzUgKzE0MDAsMTMgQEAgc3RhdGljIEpTT2JqZWN0KiBwdXRU
b1Njb3BlQ29tbW9uKEV4ZWNTdAogICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9
IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQpOwogCiAgICAgaWYgKG1vZGVBbmRU
eXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9wZXJ0eShleGVj
LCBpZGVudCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4
ZWMsIGlkZW50KTsKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihleGVjLCBpZGVudCkpOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQo
c2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgQ29tbW9uU2xvd1Bh
dGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUs
IG1vZGVBbmRUeXBlLCBzbG90KTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi1MTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKQotewotICAgIExMSU5UX0JFR0lO
KCk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHV0VG9TY29wZUNvbW1vbihleGVjLCBwYywgdm0p
OwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTExJTlRfVEhST1coZXJyb3IpOwotICAgIExMSU5U
X0VORCgpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZSkKLXsKLSAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24g
aXMgdGhlIHNhbWUgYXMgcHV0X3RvX3Njb3BlIHdpdGggYSBUeXBlTG9jYXRpb24gYXBwZW5kZWQ6
IHB1dF90b19zY29wZV93aXRoX3Byb2ZpbGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVB
bmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQsIFR5cGVMb2NhdGlvbioKLSAgICBMTElOVF9CRUdJ
TigpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHB1dFRvU2NvcGVDb21tb24oZXhlYywgcGMsIHZt
KTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVycm9yKTsKLSAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gcGNbN10udS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVlIHZhbCA9
IExMSU5UX09QX0MoMykuanNWYWx1ZSgpOwotICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNv
cmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9uKTsKICAgICBMTElOVF9F
TkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTAgKzEyMCw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHIKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbik7CiBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSk7CiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSk7Ci1MTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpOwot
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhf
aGlnaF9maWRlbGl0eSk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJv
d19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFM
OwogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lOVEVS
TkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcx
LDE1ICsxMjcxLDUgQEAgX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKICAgICBkaXNw
YXRjaCg1KQogCiBfbGxpbnRfb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHk6Ci0g
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCi0gICAgZGlzcGF0Y2goNCkKLQotX2xsaW50X29wX3B1dF90b19zY29wZV93aXRo
X3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi0gICAgZGlzcGF0Y2goOCkKLQot
X2xsaW50X29wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKLSAgICB0cmFjZUV4ZWN1dGlv
bigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0
aF9wcm9maWxlKQotICAgIGRpc3BhdGNoKDkpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhf
cHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCisgICAgZGlzcGF0Y2goNikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24g
MTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENv
ZGVDYWNoZTo6Z2V0R2xvCiB7CiAgICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5
KHNvdXJjZSwgU3RyaW5nKCksIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29k
ZVR5cGUsIHN0cmljdG5lc3MpOwogICAgIENvZGVDYWNoZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fc291cmNlQ29kZS5hZGQoa2V5LCBTb3VyY2VDb2RlVmFsdWUoKSk7Ci0gICAgYm9vbCBj
YW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9mZiAmJiBwcm9maWxlck1vZGUgPT0g
UHJvZmlsZXJPZmY7CisgICAgYm9vbCBjYW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dl
ck9mZiAmJiBwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPZmYgJiYgIXZtLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBj
YW5DYWNoZSkgewogICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJs
b2NrID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5m
aXJzdExpbmUoKSArIHVubGlua2VkQ29kZUJsb2NrLT5maXJzdExpbmUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUu
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlMb2cu
aCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTY0MSw2ICs2NDIsMTUgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZwogICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmco
KSkpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hp
Z2hfZmlkZWxpdHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9u
ID0gcGNbMl0udS5sb2NhdGlvbjsKKyAgICBKU1ZhbHVlIHZhbCA9IE9QX0MoMSkuanNWYWx1ZSgp
OworICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2Nh
dGlvbih2YWwsIGxvY2F0aW9uKTsKKyAgICBFTkQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24g
MTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsNyBAQCBTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2dldF9zdHJ1CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDQ5ICs0Myw0
NiBAQCB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6aW5pdGlhbGl6ZUhpZ2hGaWRlCiAgICAgQVNTRVJU
KCFtX2xvZ1N0YXJ0UHRyKTsKICAgICBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUgPSA1MDAwMDsKICAg
ICBtX2xvZ1N0YXJ0UHRyID0gbmV3IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07Ci0g
ICAgbV9uZXh0QnVmZmVyID0gbmV3IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07Ci0g
ICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1fbG9n
U3RhcnRQdHI7CisgICAgbV9sb2dFbmRQdHIgPSBtX2xvZ1N0YXJ0UHRyICsgbV9oaWdoRmlkZWxp
dHlMb2dTaXplOwogfQogCiBIaWdoRmlkZWxpdHlMb2c6On5IaWdoRmlkZWxpdHlMb2coKQogewog
ICAgIGRlbGV0ZVtdIG1fbG9nU3RhcnRQdHI7Ci0gICAgZGVsZXRlW10gbV9uZXh0QnVmZmVyOwog
fQogCiB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcg
cmVhc29uKQogewotICAgIGlmICghbV9jdXJyZW50T2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0K
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUHJvY2VzcyBjYWxsZXI6JyIsIHJl
YXNvbiwiJyIpOwogCiAgICAgZG91YmxlIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICBM
b2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJlSUQs
IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IGkgPSAwOwot
ICAgIHdoaWxlIChpIDwgbV9jdXJyZW50T2Zmc2V0KSB7CisgICAgd2hpbGUgKGVudHJ5ICE9IG1f
Y3VycmVudExvZ0VudHJ5UHRyKSB7CiAgICAgICAgIFN0cnVjdHVyZUlEIGlkID0gZW50cnktPnN0
cnVjdHVyZUlEOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlOyAKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGVudHJ5LT52YWx1ZTsKICAgICAgICAgaWYgKGlkKSB7CiAgICAg
ICAgICAgICBhdXRvIGl0ZXIgPSBzZWVuU2hhcGVzLmZpbmQoaWQpOwogICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gc2VlblNoYXBlcy5lbmQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlID0gSGVh
cDo6aGVhcChlbnRyeS0+dmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGVu
dHJ5LT5zdHJ1Y3R1cmVJRCktPnRvU3RydWN0dXJlU2hhcGUoZW50cnktPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBzaGFwZSA9IEhlYXA6OmhlYXAodmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KGVudHJ5LT5zdHJ1Y3R1cmVJRCktPnRvU3RydWN0dXJlU2hhcGUodmFsdWUp
OwogICAgICAgICAgICAgICAgIHNlZW5TaGFwZXMuc2V0KGlkLCBzaGFwZSk7CiAgICAgICAgICAg
ICB9IGVsc2UgCiAgICAgICAgICAgICAgICAgc2hhcGUgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
fQogCisgICAgICAgIFJ1bnRpbWVUeXBlIHR5cGUgPSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZv
clZhbHVlKHZhbHVlKTsKKyAgICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
IHR5cGU7CiAgICAgICAgIGlmIChlbnRyeS0+bG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKLSAg
ICAgICAgICAgIGVudHJ5LT5sb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hZGRUeXBlRm9yVmFs
dWUoZW50cnktPnZhbHVlLCBzaGFwZSwgaWQpOwotICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1f
aW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUoZW50cnktPnZhbHVlLCBzaGFwZSwg
aWQpOworICAgICAgICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFkZFR5
cGVJbmZvcm1hdGlvbih0eXBlLCBzaGFwZSwgaWQpOworICAgICAgICBlbnRyeS0+bG9jYXRpb24t
Pm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hhcGUsIGlk
KTsKIAogICAgICAgICBlbnRyeSsrOwotICAgICAgICBpKys7CiAgICAgfQogCi0gICAgbV9jdXJy
ZW50T2Zmc2V0ID0gMDsKKyAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1fbG9nU3RhcnRQdHI7
CiAKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGlt
ZU1TKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlMb2cuaAkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbjsgCiAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOworCisgICAgICAgIHN0
YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoTG9nRW50cnksIHN0cnVjdHVyZUlEKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZh
bHVlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCB2YWx1ZSk7IH0K
KyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2NhdGlvbk9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMb2dFbnRyeSwgbG9jYXRpb24pOyB9CiAgICAgfTsKIAorCiAgICAgSGlnaEZp
ZGVsaXR5TG9nKCkKICAgICAgICAgOiBtX2xvZ1N0YXJ0UHRyKDApCiAgICAgewpAQCAtNTksMzcg
KzY0LDI5IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVjb3JkVHlwZUluZm9y
bWF0aW9uRm9yTG9jYXRpb24oSlNWYWx1ZSB2YWx1ZSwgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2xvZ1N0YXJ0UHRyKTsKLSAgICAgICAgQVNTRVJUKG1f
Y3VycmVudE9mZnNldCA8IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSk7Ci0gICAgCi0gICAgICAgIExv
Z0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHIgKyBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgCi0g
ICAgICAgIGVudHJ5LT5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICBlbnRyeS0+dmFsdWUg
PSB2YWx1ZTsKLSAgICAgICAgZW50cnktPnN0cnVjdHVyZUlEID0gKHZhbHVlLmlzQ2VsbCgpID8g
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgOiAwKTsKKworICAgICAgICBtX2N1cnJlbnRM
b2dFbnRyeVB0ci0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAgICAgbV9jdXJyZW50TG9nRW50
cnlQdHItPnZhbHVlID0gdmFsdWU7CisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT5zdHJ1
Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgp
IDogMCk7CiAgICAgCi0gICAgICAgIG1fY3VycmVudE9mZnNldCArPSAxOwotICAgICAgICBpZiAo
bV9jdXJyZW50T2Zmc2V0ID09IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSkKKyAgICAgICAgbV9jdXJy
ZW50TG9nRW50cnlQdHIgKz0gMTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudExvZ0Vu
dHJ5UHRyID09IG1fbG9nRW5kUHRyKSkKICAgICAgICAgICAgIHByb2Nlc3NIaWdoRmlkZWxpdHlM
b2coIkxvZyBGdWxsIik7CiAgICAgfQogCiAgICAgdm9pZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9n
KFN0cmluZyk7CisgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
RW5kUHRyOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEhpZ2hGaWRlbGl0eUxvZywgbV9sb2dTdGFydFB0cik7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihIaWdoRmlkZWxpdHlMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQogCiBw
cml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUhpZ2hGaWRlbGl0eUxvZygpOwogCiAgICAgdW5z
aWduZWQgbV9oaWdoRmlkZWxpdHlMb2dTaXplOwotICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7
CiAgICAgTG9nRW50cnkqIG1fbG9nU3RhcnRQdHI7Ci0gICAgTG9nRW50cnkqIG1fbmV4dEJ1ZmZl
cjsKLQotICAgIEJ5dGVTcGluTG9jayBtX2xvY2s7Ci0KLSAgICBzdHJ1Y3QgVGhyZWFkRGF0YSB7
Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgTG9nRW50cnkqIG1fcHJvY2Vzc0xvZ1B0cjsKLSAg
ICAgICAgc2l6ZV90IG1fcHJvY2Nlc3NMb2dUb09mZnNldDsKLSAgICAgICAgQnl0ZVNwaW5Mb2Nr
ZXIqIG1fbG9ja2VyOwotICAgIH07CisgICAgTG9nRW50cnkqIG1fY3VycmVudExvZ0VudHJ5UHRy
OworICAgIExvZ0VudHJ5KiBtX2xvZ0VuZFB0cjsKIH07CiAKIH0gLy9uYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShy
ZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMSArMTAzLDYgQEAgU3ltYm9sVGFibGU6
OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICAsIG1fY2FwdHVyZUVuZCgwKQogICAgICwgbV9mdW5j
dGlvbkVudGVyZWRPbmNlKENsZWFyV2F0Y2hwb2ludCkKIHsKLSAgICBpZiAodm0uaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBtX3VuaXF1ZUlETWFwID0gc3Rk
OjptYWtlX3VuaXF1ZTxVbmlxdWVJRE1hcD4oKTsKLSAgICAgICAgbV9yZWdpc3RlclRvVmFyaWFi
bGVNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4oKTsKLSAgICAg
ICAgbV91bmlxdWVUeXBlU2V0TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxVbmlxdWVUeXBlU2V0TWFw
PigpOwotICAgIH0KIH0KIAogU3ltYm9sVGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQpAQCAtMTY0
LDcwICsxNTksMTA0IEBAIFN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE4K
ICAgICAgICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzW2ldID0gbV9zbG93QXJndW1lbnRz
W2ldOwogICAgIH0KIAotICAgIGlmIChtX3VuaXF1ZUlETWFwICYmIHJlc3VsdC0+bV91bmlxdWVJ
RE1hcCkgeworICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgeworICAgICAgICByZXN1
bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmls
aW5nUmFyZURhdGE+KCk7CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyID0gbV91
bmlxdWVJRE1hcC0+YmVnaW4oKTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlxdWVJRE1h
cC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0
YS0+bV91bmlxdWVJRE1hcC5iZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV91bmlxdWVJ
RE1hcC0+c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3Vs
dC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGl0ZXItPmtleSwg
aXRlci0+dmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBp
dGVyID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBhdXRv
IGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1dG8g
aXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5i
ZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+
bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICByZXN1bHQtPm1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwLT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuc2V0
KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAg
ICAgICAgYXV0byBpdGVyID0gbV91bmlxdWVUeXBlU2V0TWFwLT5iZWdpbigpOwotICAgICAgICAg
ICAgYXV0byBlbmQgPSBtX3VuaXF1ZVR5cGVTZXRNYXAtPmVuZCgpOworICAgICAgICAgICAgYXV0
byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5iZWdp
bigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91
bmlxdWVUeXBlU2V0TWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5tX3VuaXF1ZVR5cGVTZXRNYXAtPnNldChp
dGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPm1fdHlwZVBy
b2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuc2V0KGl0ZXItPmtleSwgaXRlci0+
dmFsdWUpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAordm9pZCBTeW1ib2xUYWJsZTo6cHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmco
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCit7CisgICAgaWYgKG1fdHlwZVByb2ZpbGluZ1Jh
cmVEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOworCisgICAgZm9yIChh
dXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgeworICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1h
cC5zZXQoaXRlci0+a2V5LCBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7Cisg
ICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5z
ZXQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+a2V5KTsKKyAgICB9Cit9CisKIEdsb2Jh
bFZhcmlhYmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQogewotICAgIGF1dG8gaXRl
ciA9IG1fdW5pcXVlSURNYXAtPmZpbmQoa2V5KTsKLSAgICBhdXRvIGVuZCA9IG1fdW5pcXVlSURN
YXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAgUkVM
RUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBpdGVyID0g
bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZmluZChrZXkpOworICAgIGF1
dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZW5kKCk7Cisg
ICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJ
REV4aXN0czsKIAotICAgIEdsb2JhbFZhcmlhYmxlSUQmIGlkID0gaXRlci0+dmFsdWU7CisgICAg
R2xvYmFsVmFyaWFibGVJRCBpZCA9IGl0ZXItPnZhbHVlOwogICAgIGlmIChpZCA9PSBIaWdoRmlk
ZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbikgewogICAgICAgICBpZCA9IHZtLmdldE5leHRV
bmlxdWVWYXJpYWJsZUlEKCk7Ci0gICAgICAgIG1fdW5pcXVlVHlwZVNldE1hcC0+c2V0KGtleSwg
VHlwZVNldDo6Y3JlYXRlKCkpOyAvL21ha2UgYSBuZXcgZ2xvYmFsIHR5cGVzZXQgZm9yIHRoZSBJ
RAorICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5zZXQoa2V5
LCBpZCk7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRN
YXAuc2V0KGtleSwgVHlwZVNldDo6Y3JlYXRlKCkpOyAvLyBNYWtlIGEgbmV3IGdsb2JhbCB0eXBl
c2V0IGZvciB0aGlzIGNvcnJlc3BvbmRpbmcgSUQuCiAgICAgfQotICAgICAgICAgCisKICAgICBy
ZXR1cm4gaWQ7CiB9CiAKIEdsb2JhbFZhcmlhYmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9y
UmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJ
bmRleCwgVk0mIHZtKQogewotICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFw
LT5maW5kKHJlZ2lzdGVySW5kZXgpOwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3RlclRvVmFyaWFi
bGVNYXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBpdGVy
ID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQo
cmVnaXN0ZXJJbmRleCk7CisgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+
bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAg
ICAgICByZXR1cm4gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKwogICAgIHJldHVybiB1
bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaXRlci0+dmFsdWUuZ2V0KCksIHZtKTsKIH0KIAog
UmVmUHRyPFR5cGVTZXQ+IFN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZt
KQogewotICAgIHVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCByZWdpc3RlckluZGV4LCB2bSk7
IC8vZW5zdXJlIGl0J3MgY3JlYXRlZAotICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwLT5maW5kKHJlZ2lzdGVySW5kZXgpOwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3RlclRv
VmFyaWFibGVNYXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7
CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgdW5p
cXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHJlZ2lzdGVySW5kZXgsIHZtKTsgLy8gTGF6aWx5IGNy
ZWF0ZSB0aGUgVHlwZVNldCBpZiBuZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZmluZChyZWdpc3Rlcklu
ZGV4KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVy
VG9WYXJpYWJsZU1hcC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCiAgICAgcmV0dXJuIGdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIs
IGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xUYWJs
ZTo6Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgU3RyaW5nSW1wbCoga2V5LCBWTSYgdm0pCiB7Ci0gICAgdW5pcXVlSURGb3JWYXJpYWJs
ZShsb2NrZXIsIGtleSwgdm0pOwotICAgIHJldHVybiBtX3VuaXF1ZVR5cGVTZXRNYXAtPmZpbmQo
a2V5KS0+dmFsdWU7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEp
OworCisgICAgdW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGtleSwgdm0pOyAvLyBMYXppbHkg
Y3JlYXRlIHRoZSBUeXBlU2V0IGlmIG5lY2Vzc2FyeS4KKworICAgIGF1dG8gaXRlciA9IG1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuZmluZChrZXkpOworICAgIGF1
dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5lbmQo
KTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTcxOTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDE3LDEyICs0MTcsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpBZGRS
ZXN1bHQgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNv
bnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5pcXVl
SURNYXApIHsKLSAgICAgICAgICAgIC8vIFVzZSBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBu
ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgSUQuIEJlY2F1c2UgVk0gaXMgaW4gY2hhcmdlIG9mIGNy
ZWF0aW5nIHVuaXF1ZUlEcywgCi0gICAgICAgICAgICAvLyB3aGVuIHVuaXF1ZUlEKCkgaXMgY2Fs
bGVkLCB3ZSBjaGVjayB0aGlzIGZsYWcgdG8gc2VlIGlmIHVuaXF1ZUlEIGNyZWF0aW9uIGlzIG5l
Y2Vzc2FyeS4KLSAgICAgICAgICAgIG1fdW5pcXVlSURNYXAtPnNldChrZXksIEhpZ2hGaWRlbGl0
eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKTsgCi0gICAgICAgICAgICBtX3JlZ2lzdGVyVG9WYXJp
YWJsZU1hcC0+c2V0KGVudHJ5LmdldEluZGV4KCksIGtleSk7Ci0gICAgICAgIH0KICAgICAgICAg
cmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00MzQsMTAgKzQy
OCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYg
ZW50cnkpCiAgICAgewotICAgICAgICBpZiAobV91bmlxdWVJRE1hcCkgewotICAgICAgICAgICAg
bV91bmlxdWVJRE1hcC0+c2V0KGtleSwgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRp
b24pOyAKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5zZXQoZW50cnkuZ2V0
SW5kZXgoKSwga2V5KTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwg
ZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQ4OSw2ICs0NzksOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOwogCisgICAgdm9pZCBwcmVw
YXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
Jik7CisKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpAQCAtNTEzLDkgKzUwNSwxMiBAQCBwcml2
YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxVbmlxdWVJRE1hcD4gbV91bmlxdWVJRE1hcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVnaXN0ZXJUb1ZhcmlhYmxlTWFwPiBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VW5pcXVlVHlwZVNldE1hcD4gbV91bmlxdWVUeXBlU2V0TWFwOworICAgIHN0
cnVjdCBUeXBlUHJvZmlsaW5nUmFyZURhdGEgeworICAgICAgICBVbmlxdWVJRE1hcCBtX3VuaXF1
ZUlETWFwOworICAgICAgICBSZWdpc3RlclRvVmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFyaWFi
bGVNYXA7CisgICAgICAgIFVuaXF1ZVR5cGVTZXRNYXAgbV91bmlxdWVUeXBlU2V0TWFwOworICAg
IH07CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJv
ZmlsaW5nUmFyZURhdGE7CiAKICAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7
CiAgICAgYm9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxNyAr
NjIsMTYgQEAgUnVudGltZVR5cGUgVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAgIGVs
c2UgaWYgKHYuaXNPYmplY3QoKSkKICAgICAgICAgcmV0ID0gVHlwZU9iamVjdDsKICAgICBlbHNl
Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldCA9IFR5cGVOb3RoaW5nOwogCiAgICAgcmV0
dXJuIHJldDsKIH0KIAotdm9pZCBUeXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSwgU3RydWN0dXJlSUQgaWQpIAordm9pZCBU
eXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUgdHlwZSwgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKIHsKLSAgICBSdW50aW1lVHlw
ZSB0ID0gZ2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2KTsKLSAgICBtX3NlZW5UeXBlcyA9IG1fc2Vl
blR5cGVzIHwgdDsKKyAgICBtX3NlZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdHlwZTsKIAotICAg
IGlmIChpZCAmJiBzaGFwZSAmJiAhdi5pc1N0cmluZygpICYmICF2LmlzRnVuY3Rpb24oKSkgewor
ICAgIGlmIChpZCAmJiBzaGFwZSAmJiB0eXBlICE9IFR5cGVTdHJpbmcpIHsKICAgICAgICAgQVNT
RVJUKG1fc3RydWN0dXJlSURIaXN0b3J5LmlzVmFsaWRLZXkoaWQpKTsKICAgICAgICAgYXV0byBp
dGVyID0gbV9zdHJ1Y3R1cmVJREhpc3RvcnkuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyID09
IG1fc3RydWN0dXJlSURIaXN0b3J5LmVuZCgpKSB7CkBAIC0yMTgsOCArMjE3LDYgQEAgU3RyaW5n
IFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gVHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkg
Y29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gc2VlbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgp
OwotICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVGdW5jdGlvbikKLSAgICAgICAgIHNlZW4tPmFk
ZEl0ZW0oIkZ1bmN0aW9uIik7CiAgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCkK
ICAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIlVuZGVmaW5lZCIpOwogICAgIGlmIChtX3NlZW5UeXBl
cyAmIFR5cGVOdWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQu
aAkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIGNsYXNzIFR5cGVTZXQgOiBw
dWJsaWMgUmVmQ291bnRlZDxUeXBlU2UKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
eXBlU2V0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVHlwZVNldCk7IH0KICAgICBU
eXBlU2V0KCk7Ci0gICAgdm9pZCBhZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOworICAgIHZvaWQgYWRkVHlwZUluZm9ybWF0
aW9uKFJ1bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQp
OwogICAgIHN0YXRpYyBSdW50aW1lVHlwZSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKEpTVmFsdWUp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKICAgICBT
dHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDExICszMjksOCBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLy8gd29uJ3QgdXNlIHRoaXMuCiAg
ICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcigpKTsKIAotICAgIC8vIEZJWE1FOiBjb25kaXRpb25hbGx5IGFsbG9jYXRlIHRo
aXMgc3R1ZmYgYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGluc3BlY3RvciBpcyBydW5uaW5n
IE9SIHRoaXMgZmxhZyBpcyBlbmFibGVkIChub3QganVzdCBpZiB0aGUgZmxhZyBpcyBlbmFibGVk
KS4KLSAgICBpZiAoT3B0aW9uczo6cHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0g
ICAgICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXI+KCk7Ci0gICAgICAgIG1faGlnaEZpZGVsaXR5TG9nID0gc3Rk
OjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlMb2c+KCk7Ci0gICAgfQorICAgIGlmIChPcHRpb25z
Ojpwcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIGVuYWJsZUhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmcoKTsKIH0KIAogVk06On5WTSgpCkBAIC05MjYsNiArOTIzLDI0IEBA
IHZvaWQgVk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWwKICAgICB9CiB9CiAKK3Zv
aWQgVk06OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKQoreworICAgIGlmIChpc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyPigpOworICAgIG1faGlnaEZpZGVsaXR5TG9nID0gc3RkOjptYWtlX3VuaXF1
ZTxIaWdoRmlkZWxpdHlMb2c+KCk7Cit9CisKK3ZvaWQgVk06OmRpc2FibGVIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
LnJlc2V0KG51bGxwdHIpOworICAgIG1faGlnaEZpZGVsaXR5TG9nLnJlc2V0KG51bGxwdHIpOwor
fQorCiB2b2lkIFZNOjpkdW1wSGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKQogewogICAgIGlm
ICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDYgKzUxNyw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBCdWlsdGluRXhlY3V0YWJsZXMqIGJ1aWx0aW5FeGVjdXRhYmxl
cygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1dGFibGVzLmdldCgpOyB9CiAKICAgICAgICAgYm9v
bCBpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpIHsgcmV0dXJuICEhbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI7IH0KKyAgICAgICAgdm9pZCBlbmFibGVIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nKCk7CisgICAgICAgIHZvaWQgZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmcoKTsKICAgICAgICAgSGlnaEZpZGVsaXR5TG9nKiBoaWdoRmlkZWxpdHlMb2coKSB7IHJldHVy
biBtX2hpZ2hGaWRlbGl0eUxvZy5nZXQoKTsgfQogICAgICAgICBIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIqIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmdldCgpOyB9CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbmV4dExvY2F0aW9u
KCkgeyByZXR1cm4gbV9sb2NhdGlvbkluZm8uYWRkKCk7IH0gLy9UT0RPOiBwb3NzaWJsZSBvcHRt
aXphdGlvbjogd2hlbiBjb2RlYmxvY2tzIGRpZSwgcmVwb3J0IHdoaWNoIGxvY2F0aW9ucyBhcmUg
bm8gbG9uZ2VyIGJlaW5nIGNoYW5nZWQgc28gd2UgZG9uJ3Qgd2FsayBvdmVyIHRoZW0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235911</attachid>
            <date>2014-08-01 15:40:05 -0700</date>
            <delta_ts>2014-08-11 14:31:20 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>75724</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw3IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3RoIiA6IDMgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6IDYg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0aCIg
OiA4IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZV93aXRoX3By
b2ZpbGUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0
X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNCB9LApAQCAtMTIy
LDcgKzEyMCw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9k
aWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5k
IiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6
IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxNzE5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldCgKICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRf
b2ZfbGluZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9w
X3B1dF9ieV9pZDoKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKQEAgLTEyMyw3ICsxMjIsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKLSAgICBjYXNl
IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Nj
b3BlOgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgpA
QCAtMjUxLDcgKzI0OSw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmwKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKICAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKLSAgICBjYXNlIG9wX3B1dF90b19zY29w
ZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6CiAgICAgY2FzZSBvcF9lbmQ6
CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTMyMSw3ICszMTgsNiBAQCB2b2lk
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9uZXdfZnVu
Y19leHA6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnczoKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2Nh
bGxfZXZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMyw3ICsxNTMzLDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICAgICBvcGVyYW5kKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwpAQCAtMTU0Miw4ICsxNTQxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZSgKICAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVyZQogICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFuZAogICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX3Njb3Bl
Iik7Ci0gICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGUpCi0gICAgICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMsICV1PCVzfCVzPiwgPHN0cnVjdHVyZT4sICVkIiwKICAgICAgICAgICAgICAgICByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLAogICAgICAgICAgICAgICAgIG1vZGVBbmRUeXBlLm9w
ZXJhbmQoKSwgcmVzb2x2ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1vZGUoKSksIHJlc29sdmVUeXBl
TmFtZShtb2RlQW5kVHlwZS50eXBlKCkpLApAQCAtMTcyNiw2ICsxNzIzLDExIEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBib29sIGRpZENsb25lU3ltYm9s
VGFibGUgPSBmYWxzZTsKICAgICAKICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
dW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fdm0tPmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgc3lt
Ym9sVGFibGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3lt
Ym9sVGFibGUtPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNl
dCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1
cmVkTmFtZXMoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OwpAQCAtMTk2NSwxMyArMTk2NywxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBjWzBdLnUub3Bjb2RlID09IG9w
X2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSA/IDIgOiAxKTsKLSAgICAgICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BMZW5ndGggLSBvZmZzZXRd
LnUub3BlcmFuZF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1
ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIEFTU0VS
VChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAgICAgICAgICAgIHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExl
bmd0aCAtIG9mZnNldF0gPSBwcm9maWxlOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDFdID0gcHJvZmlsZTsKIAogICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUg
ZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCiAg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5v
cGVyYW5kKTsKQEAgLTE5ODUsMTYgKzE5ODUsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0
cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBv
cF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUg
Zm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IGdldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmls
ZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQs
IC4uLiwgVHlwZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zm
c2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZz
ZXQpOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgOF0udS5sb2NhdGlvbiA9IGxv
Y2F0aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ug
b3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlk
LCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQp
OwpAQCAtMjAxMSwzMCArMjAwNCw1MCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVy
ZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBvcF9wdXRf
dG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBv
ZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBp
ZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9j
YXRpb24qCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9w
TGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2Nv
cGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OiB7CisgICAgICAgICAgICAvLyBU
aGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y2l0b24gaXM6IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmll
cj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0g
aSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90
RW5kOwogICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEOwogICAg
ICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CiAgICAgICAgICAgICBib29s
IHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVF
eHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKHBjWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwotCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2FzdDxQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKwogICAgICAgICAg
ICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
UHV0VG9TY29wZToKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9t
U2NvcGU6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50
aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBl
ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgKGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0
ZWNvZGVHZXRGcm9tU2NvcGUgPyBHZXQgOiBQdXQpLCB0eXBlKTsKKworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBhbHNv
IGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGUgZ2xvYmFsSUQKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM1MTg0CisgICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9u
LT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xv
YmFsVmFyKQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0
LmdldCgpLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBtdXN0IGJlIGNhbGxlZCBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHdlIG1heSBncmFi
IGEgU3ltYm9sIFRhYmxlIHRoYXQgaGFzbid0IGJlZW4gcHJlcGFyZWQgZm9yIHByb2ZpbGluZyBm
cm9tIGFuIG91dGVyIHNjb3BlLgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJl
cGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxl
KGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwg
aWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3Rz
OworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQ6IHsKKyAgICAgICAgICAgICAgICBz
eW1ib2xUYWJsZSA9IG1fc3ltYm9sVGFibGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxv
Y2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAg
Z2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9j
a2VyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBn
bG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2Vy
LCBwcm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9i
YWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihsb2NrZXIs
IHByb2ZpbGVSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURv
ZXNOb3RIYXZlR2xvYmFsSUQ6IApAQCAtMjA1OSw3ICsyMDcyLDggQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWly
ID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCkt
PmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELCBtX293bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsIHZtKCkpOworICAg
ICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZt
KCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRU
eXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKKyAgICAgICAgICAgICAgICBtX293bmVyRXhl
Y3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQs
IHZtKCkpOwogICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGxvY2F0aW9uUGFp
ci5maXJzdDsKICAgICAgICAgICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5z
ZWNvbmQ7CiAKQEAgLTI1NDMsOSArMjU1Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6Ci0gICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAg
ICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgICAgIFJlc29s
dmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9CiAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVN
b2RlQW5kVHlwZShjdXJJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwpAQCAtMzk1NSwzNSArMzk2
Nyw0IEBAIERGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJpbGkKIH0KICNlbmRp
ZgogCi1UeXBlTG9jYXRpb24qIENvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29s
dmVPcCBvcCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNl
dCkKLXsKLSAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKLSAgICBib29sIHNob3Vs
ZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNz
aW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7Ci0gICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEOwotICAgIFJl
ZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OwotCi0gICAgLy8gRklYTUU6IGhhbmRsZSBvdGhl
ciB2YWx1ZXMgZm9yIG9wLnR5cGUgaGVyZSwgYW5kIGFsc28gY29uc2lkZXIgd2hhdCB0byBkbyB3
aGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSBnbG9iYWxJRAotICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7Ci0gICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3Vy
ZVZhcikgCi0gICAgICAgIHN5bWJvbFRhYmxlID0gb3AuYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUo
KTsKLSAgICBlbHNlIGlmIChvcC50eXBlID09IEdsb2JhbFZhcikKLSAgICAgICAgc3ltYm9sVGFi
bGUgPSBtX2dsb2JhbE9iamVjdC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKLSAgICAKLSAgICBpZiAo
c3ltYm9sVGFibGUpIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7Ci0gICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+
dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwotICAgICAg
ICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShs
b2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwotICAgIH0gZWxzZQotICAgICAgICBnbG9iYWxW
YXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKLQotICAgIHN0ZDo6cGFp
cjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2Jh
bFZhcmlhYmxlSUQsIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9IGxvY2F0aW9uUGFpci5maXJzdDsKLSAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlv
blBhaXIuc2Vjb25kOwotCi0gICAgaWYgKHNob3VsZEFuYWx5emUgJiBpc05ld0xvY2F0aW9uKQot
ICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRp
b24obG9jYXRpb24pOwotCi0gICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyMiw4ICsxMDIyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwogICAgIH0KIAot
ICAgIFR5cGVMb2NhdGlvbiogc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVPcCwgY29uc3Qg
SWRlbnRpZmllciYsIHNpemVfdCk7Ci0gICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHJl
c2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAg
IHZvaWQgcmVzZXRTdHViRHVyaW5nR0NJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlw
ZUxvY2F0aW9uLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9UeXBlTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBUeXBlTG9jYXRpb25faAogCiAjaW5jbHVkZSAiVHlwZVNldC5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDE0ICs0MiwxNiBAQCB0
eXBlZGVmIGludHB0cl90IEdsb2JhbFZhcmlhYmxlSUQ7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgVHlwZUxvY2F0aW9uKCkgCi0gICAgICAgIDogbV9kaXZvdEZvckZ1bmN0
aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQoVUlOVF9NQVgpCisgICAgVHlwZUxvY2F0aW9uKCkK
KyAgICAgICAgOiBtX2xhc3RTZWVuVHlwZShUeXBlTm90aGluZykKKyAgICAgICAgLCBtX2Rpdm90
Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkKICAgICAgICAgLCBt
X2luc3RydWN0aW9uVHlwZVNldChUeXBlU2V0OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2dsb2Jh
bFR5cGVTZXQobnVsbHB0cikKICAgICB7CiAgICAgfQogCiAgICAgR2xvYmFsVmFyaWFibGVJRCBt
X2dsb2JhbFZhcmlhYmxlSUQ7CisgICAgUnVudGltZVR5cGUgbV9sYXN0U2VlblR5cGU7CiAgICAg
aW50cHRyX3QgbV9zb3VyY2VJRDsKICAgICB1bnNpZ25lZCBtX2Rpdm90U3RhcnQ7CiAgICAgdW5z
aWduZWQgbV9kaXZvdEVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzE5MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDggKzExNSwxMyBAQCBQYXJzZXJFcnJvciBCeXRl
Y29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQo
KTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICBpZiAobV9jb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT52bSgpLT5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsK
KyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5wcmVwYXJlRm9ySGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CiAgICAgICAgIG1fY29kZUJs
b2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0
dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgIH0KIAogICAgIGlmIChtX2V4cHJl
c3Npb25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91
dE9mTWVtb3J5KTsKQEAgLTEwMDUsNyArMTAxMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TW92ZSgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHdhdGNoYWJs
ZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogCiAgICAgaWYgKCFkc3QtPmlzVGVtcG9yYXJ5KCkg
JiYgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2Jh
bElEKTsKKyAgICAgICAgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9m
aWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKIAogICAgIHJldHVybiBkc3Q7
CiB9CkBAIC0xMTI0LDEyICsxMTI5LDE1IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRI
aWdoRmlkZWxpdHkKICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVF
eHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lz
dGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0
ZWNvZGVGbGFnIGZsYWcpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnLCBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudGlmaWVyKQogeworICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjaXRvbiBpczog
b3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkgcmVnVG9Qcm9maWxlLCBUeXBlTG9j
YXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/CiAgICAgZW1pdE9wY29kZShv
cF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlZ2lzdGVyVG9Qcm9maWxlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIFR5cGVMb2NhdGlvbiBv
YmplY3QgcG9pbnRlci4KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGZsYWcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpZGVudGlm
aWVyID8gYWRkQ29uc3RhbnQoKmlkZW50aWZpZXIpIDogMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVUeXBlKCkpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCkBAIC0xMjcxLDIyICsxMjc5LDYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcgogICAgIHJldHVybiBk
c3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNjb3Bl
V2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9j
b2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKLQotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVy
KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZl
TW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMg
aXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRpb24gcG9pbnRlci4KLSAgICByZXR1cm4g
ZHN0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKICAgICBtX2NvZGVCbG9jay0+
YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MTMwMiwyMSArMTI5NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
VG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUgcmVzb2x2
ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUo
KSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhp
cyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2ludGVyLgotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5j
ZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQ
cm90b3R5cGUpCiB7IAogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxMiArMjIw
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUcnlEYXRhKiB0cnlEYXRhOwogICAgIH07
CiAKLSAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeyAK
KyAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeworICAg
ICAgICBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsCisgICAgICAgIFByb2ZpbGVUeXBl
c0J5dGVjb2RlR2V0RnJvbVNjb3BlLAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0ds
b2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
CiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudCwKICAgICAgICAg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3QsCi0gICAgICAgIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQgIAorICAgICAgICBQcm9maWxlVHlw
ZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50CiAgICAgfTsKIAogICAgIGNsYXNzIEJ5
dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTQwNyw3ICs0MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHBy
ZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGVuZERpdm90KTsKLSAgICAgICAgdm9pZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcpOworICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5Qnl0ZWNvZGVGbGFnLCBjb25zdCBJZGVudGlmaWVyKik7CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAtNDc0LDkgKzQ3Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZl
TW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVz
b2x2ZU1vZGUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9k
ZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0
ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2
ZU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCopOwog
ICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTcxOTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGdlbmVyYXRvci5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkobG9jYWwuZ2V0KCksIFByb2ZpbGVU
eXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGxvY2FsLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29k
ZUhhc0dsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKG1fcG9zaXRpb24sIEpTVGV4dFBvc2l0
aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1faWRlbnQubGVuZ3RoKCksIC0xKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgbG9jYWwuZ2V0KCkpOwpAQCAtMTYyLDEyICsxNjIsMTIgQEAgUmVnaXN0ZXJJRCogUmVz
b2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9z
dGFydCArIG1faWRlbnQubGVuZ3RoKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCwgbV9zdGFydCwgZGl2b3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbV9pZGVudCk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJlZ2lzdGVySUQqIGZpbmFs
RGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZmluYWxEZXN0LCBzY29wZS5nZXQoKSwg
bV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRH
ZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBz
Y29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVHZXRGcm9tU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0
UG9zaXRpb24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93
SWZOb3RGb3VuZCk7CisgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTM4Nyw3ICszODcs
NyBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0CiAgICAgUmVnaXN0
ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZpbmFsRGVzdCwgYmFzZS5n
ZXQoKSwgcHJvcGVydHkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51
bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1
cm4gcmV0OwpAQCAtNDEzLDcgKzQxMyw3IEBAIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAgUmVnaXN0
ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLCBt
X2lkZW50KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFs
RGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lv
bkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsK
QEAgLTQ5Nyw3ICs0OTcsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVt
aXRCCiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2Fs
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQo
KSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAg
LTUxOCw3ICs1MTgsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1p
CiAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBvdXIgYnVp
bHQtaW4gY29uc3RydWN0b3JzLgogICAgICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3Iu
ZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
cmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9i
YWxJRCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXQ7CkBAIC01MzQsNyArNTM0LDcgQEAgUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgIGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQs
IFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRD
YWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQo
KSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAg
LTU1Myw3ICs1NTMsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1p
CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJh
c2UuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1
cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgp
LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCks
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC01
NzEsNyArNTcxLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dAog
ICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0
dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1
cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBu
dWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIHJldDsKQEAgLTY0NSw3ICs2NDUsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAg
ICB9CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShy
ZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJl
dHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC03NTksNyArNzU5LDcgQEAgUmVnaXN0ZXJJRCog
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGVuZC5nZXQoKSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwpAQCAtODE0LDExICs4MTQs
MTEgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9
IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2Nv
cGUuZ2V0KCksIGlkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBvbGRWYWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgZ2VuZXJhdG9y
LmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZO
b3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNj
b3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsK
KyAgICB9CiAKICAgICByZXR1cm4gb2xkVmFsdWUuZ2V0KCk7CiB9CkBAIC04NDIsNyArODQyLDcg
QEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dAogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2
YWx1ZS5nZXQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51
bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CkBA
IC04NjYsNyArODY2LDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXREb3QoQnl0ZWNv
ZAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRl
bnQsIHZhbHVlLmdldCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZl
R2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVl
KTsKQEAgLTEwMDIsMTEgKzEwMDIsMTEgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJl
c29sdmUoQnl0ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgaWRlbnQpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIGlkZW50LCBUaHJvd0lmTm90Rm91
bmQpOwogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBtX29wZXJhdG9y
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1
ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5v
dEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlIAotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwg
VGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgdmFsdWUuZ2V0KCkpOwogfQogCkBAIC0xMDI3LDcgKzEwMjcs
NyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCks
IHZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTA0OSw3ICsx
MDQ5LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29kZQogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVl
KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZh
bHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTUyMCwxMiArMTUyMCwx
MSBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNj
b3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0KCksIG1fcmln
aHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBt
X3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlzKTsKLSAgICBSZWdpc3RlcklEKiByZXQ7
IAorICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5n
ZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBy
ZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgbV9p
ZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmVzdWx0LmdldCgpLCBQcm9maWxlVHlw
ZXNCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7
CisgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTE1NTksMTIgKzE1NTgsMTEgQEAgUmVn
aXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICBkc3QgPSAwOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3JpZ2h0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJlZ2lzdGVy
SUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwg
cmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQg
OiBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0
VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdl
bmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5v
dEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHJlc3VsdC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVu
dCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVz
dWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBE
b05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgfSAKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0x
NTc5LDcgKzE1NzcsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJl
c3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRSZXN1bHQpOwpAQCAtMTU5OCw3
ICsxNTk2LDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRCeXRlYwogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFz
ZS5nZXQoKSwgbV9pZGVudCwgdXBkYXRlZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTE2MjQsNyArMTYyMiw3IEBAIFJlZ2lz
dGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWdpc3RlcklEKiBmb3J3
YXJkUmVzdWx0ID0gKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24ocmVzdWx0KSwgcmVzdWx0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpLCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNC
eXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0
aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAgLTE2NDQsNyArMTY0Miw3IEBAIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdXBkYXRl
ZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVw
ZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhw
cmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAKQEAgLTIyNTEs
NyArMjI0OSw3IEBAIHZvaWQgUmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2UKIAog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5SZWdpc3RlciA9IG1fdmFsdWUgPyBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3ZhbHVlKSA6IGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5k
ZWZpbmVkKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25S
ZXR1cm5TdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJhdG9yLnNjb3BlRGVwdGgoKSkgewpAQCAtMjU4
NCw3ICsyNTgyLDcgQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewog
ICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0LCAtMSk7
IC8vIFRoaXMgZGl2b3QgaXMgYXQgdGhlIG9wZW4gYnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLgogICAg
ICAgICBKU1RleHRQb3NpdGlvbiBlbmQoLTEsIG1fc3RhcnRTdGFydE9mZnNldCArIDEsIC0xKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGdlbmVy
YXRvci50aGlzUmVnaXN0ZXIoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmpl
Y3QpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
Z2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhp
c09iamVjdCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKHN0YXJ0LCBlbmQpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4K
QEAgLTI1OTIsNyArMjU5MCw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEJpbmRpbmdOb2Rl
KiBwYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KG1fcGFyYW1ldGVycy0+YXQo
aSkpOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCByZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dChpKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoJnJlZywgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQsIG51bGxwdHIpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
cGFyYW1ldGVyLT5kaXZvdFN0YXJ0KCksIHBhcmFtZXRlci0+ZGl2b3RFbmQoKSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNjE0LDcgKzI2MTIsNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmVt
aXRCeXRlY29kZShCeXRlCiAgICAgaWYgKCFyZXR1cm5Ob2RlKSB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIHIwID0gZ2VuZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/IGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSA6IGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxl
VHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsgLy8gRG8gbm90IGVtaXQgZXhw
cmVzc2lvbiBpbmZvIGZvciB0aGlzIHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNl
cidzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3Rh
dGVtZW50LCBudWxscHRyKTsgLy8gRG8gbm90IGVtaXQgZXhwcmVzc2lvbiBpbmZvIGZvciB0aGlz
IHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNlcidzIHNvdXJjZSBjb2RlLgogICAg
ICAgICBBU1NFUlQoc3RhcnRPZmZzZXQoKSA+PSBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwg
c3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dFJldHVybihyMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
NzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6U1NFMkNo
ZWNrUwogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC0yNjMsNiArMjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5jKQogICAgICAgICBERUZJ
TkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVf
d2lsbF9jYWxsKQorICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX25hbWVfc2NvcGUpCiAgICAgICAg
IERFRklORV9PUChvcF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X291dF9vZl9saW5lOgpAQCAtNTA4LDYgKzUxMCwxMCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OnByaXZhdGVDb21waWxlKEpJCiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CiAKKyAgICAvLyBUaGlzIGVuc3Vy
ZXMgdGhhdCB3ZSBoYXZlIHRoZSBtb3N0IHVwIHRvIGRhdGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVu
IHBlcmZvcm1pbmcgdHlwZWNoZWNrIG9wdGltaXphdGlvbnMuCisgICAgaWYgKG1fdm0tPmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIG1fdm0tPmhpZ2hGaWRlbGl0
eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxh
dGlvbi4iKTsKKwogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRv
IHRoZSBjb2RlZ2VuCiAgICAgaWYgKG1fcmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkK
ICAgICAgICAgbm9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3
MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyNiw2ICs1MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29w
X2luYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2Fs
bChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwo
SW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX25h
bWVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1c2hfd2l0aF9z
Y29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0aW9uKik7CkBAIC02NDYsNiArNjQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBS
ZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0
KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwOCw2ICsxMzA4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4X3N0
cmluZyhJbnN0cnUKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlk
ZWxpdHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCkBAIC00MSw2ICs0Miw3IEBACiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1Bh
dGhDYWxsLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTMzOCw2ICsxMzQwLDY2IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnUKICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4
X3N0cmluZyk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51LmxvY2F0aW9uOworICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBqdW1wVG9F
bmQ7CisKKyAgICAvLyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3Nz
aWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KKyAgICAvLyBU
aGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQg
SlNWYWx1ZSB0eXBlIGNoZWNrcy4KKyAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RT
ZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5U
eXBlID09IFR5cGVOdWxsKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVU
b1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSkpOworICAg
IH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9v
bGVhbikgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCBy
ZWdUMCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+MSksIHJlZ1QwKTsKKyAgICAgICAg
anVtcFRvRW5kLmFwcGVuZChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChWYWx1
ZUZhbHNlKSkpOworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVu
VHlwZSA9PSBUeXBlTWFjaGluZUludCkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoZW1pdEp1
bXBJZkltbWVkaWF0ZUludGVnZXIocmVnVDApKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVM
b2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bWJlcikgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGp1bXBUb0Vu
ZC5hcHBlbmQoZW1pdEp1bXBJZkltbWVkaWF0ZU51bWJlcihyZWdUMCkpOworICAgIH0gZWxzZSBp
ZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAg
ICAgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICAg
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAg
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIH0KKworICAgIEhpZ2hGaWRlbGl0eUxvZyog
Y2FjaGVkSGlnaEZpZGVsaXR5TG9nID0gbV92bS0+aGlnaEZpZGVsaXR5TG9nKCk7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNhY2hlZEhpZ2hGaWRlbGl0eUxvZyksIHJlZ1QyKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHQyIDwtIGhpZ2hGaWRl
bGl0eUxvZworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5TG9nOjpjdXJy
ZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0MSA8LSBuZXh0IGxvZyBlbnRyeQorCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5
cGVMb2NhdGlvbiksIHJlZ1QwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHQwIDwtIHR5cGVMb2NhdGlvbgorICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0
KCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyB0MS5sb2NhdGlvbiA8LSB0MAorCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHQwIDwtIEpTVmFs
dWUgdG8gcHJvZmlsZQorICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRl
bGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0MS52YWx1ZSA8LSB0MAorCisgICAgSnVtcCBub3RDZWxsID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHQwIDwtIHQwLnN0cnVjdHVyZUlECisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkp
OyAgICAgICAgICAgICAgICAgICAgIC8vIHQxLnN0cnVjdHVyZUlEID0gdDAKKyAgICBKdW1wIHNr
aXBJc0NlbGwgPSBqdW1wKCk7CisgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7ICAgICAgICAgICAvLyB0MS5zdHJ1Y3R1cmVJRCA9IDAK
KyAgICBza2lwSXNDZWxsLmxpbmsodGhpcyk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5KSksIHJlZ1QxKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdDEgPC0gdDEgKyBzaXplb2YoTG9nRW50cnkpCisgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5TG9nOjpjdXJyZW50TG9n
RW50cnlPZmZzZXQoKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHQyLmN1cnJlbnRM
b2dFbnRyeSA8LSB0MQorICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRIaWdoRmlkZWxpdHlMb2ctPmxvZ0VuZFB0cigp
KSk7ICAvLyBza2lwQ2xlYXJMb2cgPC0gdDEgIT0gbG9nRW5kCisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DbGVhckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlckxvZyk7CisgICAgc2tpcENsZWFy
TG9nLmxpbmsodGhpcyk7CisKKyAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKK30KKwogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzE5MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJv
ckhhbmRsaW5nU2NvcGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJI
aWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5j
bHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCIKQEAgLTE5MTAsNiArMTkxMSwxMSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9JbmRleFN0CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaW5kZXgpLnN0cmluZygpKTsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNsZWFySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyTG9nKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBleGVjLT52bSgpLmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJM
b2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIGJhc2VsaW5lIEpJVCIpOworfQorCiB9IC8vIGV4
dGVybiAiQyIKIAogLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUo
KSBuZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNiAr
MzE5LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaQogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRvclBuYW1lKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiAKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DbGVhckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25f
RUNsaSBvcGVyYXRpb25MaW5rRm9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MzIsMTUgKzUzMiw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgK
ICAgICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQogCi1MTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkp
Ci17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNb
Ml0udS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVlIHZhbCA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgp
OwotICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2Nh
dGlvbih2YWwsIGxvY2F0aW9uKTsKLSAgICBMTElOVF9FTkRfSU1QTCgpOwotfQotCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2hlY2tfaGFzX2luc3RhbmNlKQogewogICAgIExMSU5U
X0JFR0lOKCk7CkBAIC0xMzY2LDggKzEzNTcsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfcwogICAgIExMSU5UX1JFVFVSTihKU1Njb3BlOjpyZXNvbHZlKGV4ZWMs
IGV4ZWMtPnNjb3BlKCksIGlkZW50KSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29w
ZUNvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgVk0mIHZtKQorTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQogeworICAgIExMSU5UX0JF
R0lOKCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0ganND
YXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoMikuanNWYWx1ZSgpKTsKICAgICBSZXNvbHZlTW9kZUFu
ZFR5cGUgbW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKQEAgLTEzNzUsOCArMTM2OCw4IEBA
IHN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChzY29wZSk7CiAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBzbG90KSkgewogICAgICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZO
b3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBMTElOVF9SRVRVUk4oZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMs
IGlkZW50KSkpOworICAgICAgICBMTElOVF9SRVRVUk4oanNVbmRlZmluZWQoKSk7CiAgICAgfQog
CiAgICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3Qg
dW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhl
bSBhdCBjb21waWxlIHRpbWUuCkBAIC0xMzkzLDI3ICsxMzg2LDEzIEBAIHN0YXRpYyBKU1ZhbHVl
IGdldEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IGdldEZyb21TY29wZUNvbW1vbihleGVjLCBwYywgdm0pOwotICAgIExMSU5U
X1JFVFVSTih2YWx1ZSk7CisgICAgTExJTlRfUkVUVVJOKHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRl
bnQpKTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3Bl
X3dpdGhfcHJvZmlsZSkKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2Nv
cGUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNj
b3BlQ29tbW9uKGV4ZWMsIHBjLCB2bSk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBj
WzhdLnUubG9jYXRpb247Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29yZFR5cGVJbmZv
cm1hdGlvbkZvckxvY2F0aW9uKHZhbHVlLCBsb2NhdGlvbik7Ci0gICAgTExJTlRfUkVUVVJOKHZh
bHVlKTsKLX0KIAotc3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBWTSYgdm0pCi17CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwogICAgIEpTT2JqZWN0KiBzY29w
ZSA9IGpzQ2FzdDxKU09iamVjdCo+KExMSU5UX09QKDEpLmpzVmFsdWUoKSk7CkBAIC0xNDIxLDM1
ICsxNDAwLDEzIEBAIHN0YXRpYyBKU09iamVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVjU3QKICAg
ICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUocGNb
NF0udS5vcGVyYW5kKTsKIAogICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5v
dEZvdW5kICYmICFzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKQotICAgICAgICByZXR1
cm4gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CisgICAgICAgIExM
SU5UX1RIUk9XKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKIAog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
KTsKICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFs
dWUsIHNsb3QpOwogICAgIAogICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3Bl
R2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNjb3BlLCBtb2RlQW5kVHlwZSwgc2xvdCk7CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF90b19zY29wZSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIEpTT2JqZWN0KiBlcnJv
ciA9IHB1dFRvU2NvcGVDb21tb24oZXhlYywgcGMsIHZtKTsKLSAgICBpZiAoZXJyb3IpCi0gICAg
ICAgIExMSU5UX1RIUk9XKGVycm9yKTsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQotTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi17Ci0gICAg
Ly8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzIHRoZSBzYW1lIGFzIHB1dF90b19z
Y29wZSB3aXRoIGEgVHlwZUxvY2F0aW9uIGFwcGVuZGVkOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9m
aWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVy
YW5kLCBUeXBlTG9jYXRpb24qCi0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU09iamVjdCogZXJy
b3IgPSBwdXRUb1Njb3BlQ29tbW9uKGV4ZWMsIHBjLCB2bSk7Ci0gICAgaWYgKGVycm9yKQotICAg
ICAgICBMTElOVF9USFJPVyhlcnJvcik7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBj
WzddLnUubG9jYXRpb247Ci0gICAgSlNWYWx1ZSB2YWwgPSBMTElOVF9PUF9DKDMpLmpzVmFsdWUo
KTsKLSAgICB2bS5oaWdoRmlkZWxpdHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9j
YXRpb24odmFsLCBsb2NhdGlvbik7CiAgICAgTExJTlRfRU5EKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzE5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDEwICsxMjAsNyBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX3ByCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hh
bmRsZV9leGNlcHRpb24pOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9y
ZXNvbHZlX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0
X2Zyb21fc2NvcGUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRf
ZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9wdXRfdG9fc2NvcGUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpOwogZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3Io
Vk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKICNpZiBFTkFCTEUoTExJTlRfQ19M
T09QKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRf
dm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTI3MSwxNSArMTI3MSw1IEBAIF9sbGludF9v
cF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgZGlzcGF0Y2goNSkKIAogX2xsaW50X29wX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQotICAgIGRpc3BhdGNo
KDQpCi0KLV9sbGludF9vcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgotICAgIHRyYWNlRXhl
Y3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfdG9fc2NvcGVf
d2l0aF9wcm9maWxlKQotICAgIGRpc3BhdGNoKDgpCi0KLV9sbGludF9vcF9nZXRfZnJvbV9zY29w
ZV93aXRoX3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkKLSAgICBkaXNwYXRj
aCg5KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdo
X2ZpZGVsaXR5KQorICAgIGRpc3BhdGNoKDYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDcgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldEdsbwogewogICAg
IFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNlQ29kZUtleShzb3VyY2UsIFN0cmluZygpLCBDYWNo
ZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVUeXBlLCBzdHJpY3RuZXNzKTsKICAg
ICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3NvdXJjZUNvZGUuYWRkKGtl
eSwgU291cmNlQ29kZVZhbHVlKCkpOwotICAgIGJvb2wgY2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUg
PT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT2ZmOworICAgIGJvb2wg
Y2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09
IFByb2ZpbGVyT2ZmICYmICF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpOwog
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgY2FuQ2FjaGUpIHsKICAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAg
ICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENv
ZGVCbG9jay0+Zmlyc3RMaW5lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSG9zdENhbGxS
ZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgi
CkBAIC02NDEsNiArNjQyLDE1IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9z
dHJpbmcKICAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBP
UCgyKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKIH0KIAorU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQoreworICAgIEJF
R0lOKCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzJdLnUubG9jYXRpb247Cisg
ICAgSlNWYWx1ZSB2YWwgPSBPUF9DKDEpLmpzVmFsdWUoKTsKKyAgICB2bS5oaWdoRmlkZWxpdHlM
b2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsLCBsb2NhdGlvbik7Cisg
ICAgRU5EKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkgfHwgRU5BQkxFKExMSU5UKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzUsNiArMjM1LDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfc3RydQog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVt
ZXJhdG9yKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9y
X3BuYW1lKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5n
KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hp
Z2hfZmlkZWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShyZXZpc2lvbiAx
NzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw0OSArNDMsNDYgQEAgdm9pZCBIaWdoRmlkZWxpdHlM
b2c6OmluaXRpYWxpemVIaWdoRmlkZQogICAgIEFTU0VSVCghbV9sb2dTdGFydFB0cik7CiAgICAg
bV9oaWdoRmlkZWxpdHlMb2dTaXplID0gNTAwMDA7CiAgICAgbV9sb2dTdGFydFB0ciA9IG5ldyBM
b2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwotICAgIG1fbmV4dEJ1ZmZlciA9IG5ldyBM
b2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwotICAgIG1fY3VycmVudE9mZnNldCA9IDA7
CisgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgPSBtX2xvZ1N0YXJ0UHRyOworICAgIG1fbG9nRW5k
UHRyID0gbV9sb2dTdGFydFB0ciArIG1faGlnaEZpZGVsaXR5TG9nU2l6ZTsKIH0KIAogSGlnaEZp
ZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKIHsKICAgICBkZWxldGVbXSBtX2xvZ1N0YXJ0
UHRyOwotICAgIGRlbGV0ZVtdIG1fbmV4dEJ1ZmZlcjsKIH0KIAogdm9pZCBIaWdoRmlkZWxpdHlM
b2c6OnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3RyaW5nIHJlYXNvbikKIHsKLSAgICBpZiAoIW1f
Y3VycmVudE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAogICAgIGRvdWJs
ZSBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dT
dGFydFB0cjsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
PiBzZWVuU2hhcGVzOwotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG1fY3VycmVu
dE9mZnNldCkgeworICAgIHdoaWxlIChlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cikgewog
ICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9IGVudHJ5LT5zdHJ1Y3R1cmVJRDsKICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZTsgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlbnRy
eS0+dmFsdWU7CiAgICAgICAgIGlmIChpZCkgewogICAgICAgICAgICAgYXV0byBpdGVyID0gc2Vl
blNoYXBlcy5maW5kKGlkKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHNlZW5TaGFwZXMuZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBzaGFwZSA9IEhlYXA6OmhlYXAoZW50cnktPnZhbHVlLmFz
Q2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50b1N0
cnVjdHVyZVNoYXBlKGVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFw
OjpoZWFwKHZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+c3Ry
dWN0dXJlSUQpLT50b1N0cnVjdHVyZVNoYXBlKHZhbHVlKTsKICAgICAgICAgICAgICAgICBzZWVu
U2hhcGVzLnNldChpZCwgc2hhcGUpOwogICAgICAgICAgICAgfSBlbHNlIAogICAgICAgICAgICAg
ICAgIHNoYXBlID0gaXRlci0+dmFsdWU7CiAgICAgICAgIH0KIAorICAgICAgICBSdW50aW1lVHlw
ZSB0eXBlID0gVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IGVudHJ5LT5sb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPSB0eXBlOwogICAgICAgICBpZiAoZW50
cnktPmxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCi0gICAgICAgICAgICBlbnRyeS0+bG9jYXRp
b24tPm1fZ2xvYmFsVHlwZVNldC0+YWRkVHlwZUZvclZhbHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUs
IGlkKTsKLSAgICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWRk
VHlwZUZvclZhbHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUsIGlkKTsKKyAgICAgICAgICAgIGVudHJ5
LT5sb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hh
cGUsIGlkKTsKKyAgICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+
YWRkVHlwZUluZm9ybWF0aW9uKHR5cGUsIHNoYXBlLCBpZCk7CiAKICAgICAgICAgZW50cnkrKzsK
LSAgICAgICAgaSsrOwogICAgIH0KIAotICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgbV9j
dXJyZW50TG9nRW50cnlQdHIgPSBtX2xvZ1N0YXJ0UHRyOwogCiAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJldmlzaW9uIDE3
MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb247IAogICAgICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKKworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVy
ZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCBzdHJ1Y3R1cmVJ
RCk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2YWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihMb2dFbnRyeSwgdmFsdWUpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbG9jYXRpb25PZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9nRW50cnksIGxv
Y2F0aW9uKTsgfQogICAgIH07CiAKKwogICAgIEhpZ2hGaWRlbGl0eUxvZygpCiAgICAgICAgIDog
bV9sb2dTdGFydFB0cigwKQogICAgIHsKQEAgLTU5LDM3ICs2NCwyOSBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKEpTVmFs
dWUgdmFsdWUsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9sb2dTdGFydFB0cik7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQgPCBtX2hpZ2hG
aWRlbGl0eUxvZ1NpemUpOwotICAgIAotICAgICAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0
YXJ0UHRyICsgbV9jdXJyZW50T2Zmc2V0OwotICAgIAotICAgICAgICBlbnRyeS0+bG9jYXRpb24g
PSBsb2NhdGlvbjsKLSAgICAgICAgZW50cnktPnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGVudHJ5
LT5zdHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmVJRCgpIDogMCk7CisKKyAgICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHItPmxvY2F0aW9uID0g
bG9jYXRpb247CisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT52YWx1ZSA9IHZhbHVlOwor
ICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+c3RydWN0dXJlSUQgPSAodmFsdWUuaXNDZWxs
KCkgPyB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA6IDApOwogICAgIAotICAgICAgICBt
X2N1cnJlbnRPZmZzZXQgKz0gMTsKLSAgICAgICAgaWYgKG1fY3VycmVudE9mZnNldCA9PSBtX2hp
Z2hGaWRlbGl0eUxvZ1NpemUpCisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyICs9IDE7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRMb2dFbnRyeVB0ciA9PSBtX2xvZ0VuZFB0cikp
CiAgICAgICAgICAgICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJMb2cgRnVsbCIpOwogICAgIH0K
IAogICAgIHZvaWQgcHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcpOworICAgIExvZ0VudHJ5
KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIaWdo
RmlkZWxpdHlMb2csIG1fbG9nU3RhcnRQdHIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJy
ZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGlnaEZpZGVsaXR5
TG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemVIaWdoRmlkZWxpdHlMb2coKTsKIAogICAgIHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5TG9n
U2l6ZTsKLSAgICBzaXplX3QgbV9jdXJyZW50T2Zmc2V0OwogICAgIExvZ0VudHJ5KiBtX2xvZ1N0
YXJ0UHRyOwotICAgIExvZ0VudHJ5KiBtX25leHRCdWZmZXI7Ci0KLSAgICBCeXRlU3BpbkxvY2sg
bV9sb2NrOwotCi0gICAgc3RydWN0IFRocmVhZERhdGEgewotICAgICAgICBwdWJsaWM6Ci0gICAg
ICAgIExvZ0VudHJ5KiBtX3Byb2Nlc3NMb2dQdHI7Ci0gICAgICAgIHNpemVfdCBtX3Byb2NjZXNz
TG9nVG9PZmZzZXQ7Ci0gICAgICAgIEJ5dGVTcGluTG9ja2VyKiBtX2xvY2tlcjsKLSAgICB9Owor
ICAgIExvZ0VudHJ5KiBtX2N1cnJlbnRMb2dFbnRyeVB0cjsKKyAgICBMb2dFbnRyeSogbV9sb2dF
bmRQdHI7CiB9OwogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTcxOTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsMTEgKzEwMyw2IEBAIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAg
ICAgLCBtX2NhcHR1cmVFbmQoMCkKICAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVhcldh
dGNocG9pbnQpCiB7Ci0gICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KCkpIHsKLSAgICAgICAgbV91bmlxdWVJRE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVlSURN
YXA+KCk7Ci0gICAgICAgIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxSZWdpc3RlclRvVmFyaWFibGVNYXA+KCk7Ci0gICAgICAgIG1fdW5pcXVlVHlwZVNldE1hcCA9
IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVlVHlwZVNldE1hcD4oKTsKLSAgICB9CiB9CiAKIFN5bWJv
bFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7IH0KQEAgLTE2NCw3MCArMTU5LDEwNCBAQCBTeW1ib2xU
YWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROCiAgICAgICAgICAgICByZXN1bHQtPm1f
c2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKICAgICB9CiAKLSAgICBpZiAo
bV91bmlxdWVJRE1hcCAmJiByZXN1bHQtPm1fdW5pcXVlSURNYXApIHsKKyAgICBpZiAobV90eXBl
UHJvZmlsaW5nUmFyZURhdGEpIHsKKyAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJl
RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdW5pcXVlSURNYXAtPmJlZ2luKCk7Ci0g
ICAgICAgICAgICBhdXRvIGVuZCA9IG1fdW5pcXVlSURNYXAtPmVuZCgpOworICAgICAgICAgICAg
YXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuYmVnaW4o
KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5p
cXVlSURNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikK
LSAgICAgICAgICAgICAgICByZXN1bHQtPm1fdW5pcXVlSURNYXAtPnNldChpdGVyLT5rZXksIGl0
ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVE
YXRhLT5tX3VuaXF1ZUlETWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAg
fQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwLT5iZWdpbigpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBtX3JlZ2lzdGVyVG9WYXJp
YWJsZU1hcC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdS
YXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1
dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFw
LmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGl0ZXItPmtleSwg
aXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVl
KTsKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdW5p
cXVlVHlwZVNldE1hcC0+YmVnaW4oKTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlxdWVU
eXBlU2V0TWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8g
ZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5lbmQoKTsK
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAg
IHJlc3VsdC0+bV91bmlxdWVUeXBlU2V0TWFwLT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlx
dWVUeXBlU2V0TWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogICAg
IH0KLQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgU3ltYm9sVGFibGU6OnBy
ZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImKQoreworICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQ
cm9maWxpbmdSYXJlRGF0YT4oKTsKKworICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4o
KSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgbV90
eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGl0ZXItPmtleSwgSGlnaEZp
ZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pOworICAgICAgICBtX3R5cGVQcm9maWxpbmdS
YXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuc2V0KGl0ZXItPnZhbHVlLmdldEluZGV4
KCksIGl0ZXItPmtleSk7CisgICAgfQorfQorCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxl
Ojp1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJ
bXBsKiBrZXksIFZNJiB2bSkKIHsKLSAgICBhdXRvIGl0ZXIgPSBtX3VuaXF1ZUlETWFwLT5maW5k
KGtleSk7Ci0gICAgYXV0byBlbmQgPSBtX3VuaXF1ZUlETWFwLT5lbmQoKTsKLSAgICBBU1NFUlRf
VU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRh
LT5tX3VuaXF1ZUlETWFwLmZpbmQoa2V5KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CiAKLSAgICBHbG9iYWxW
YXJpYWJsZUlEJiBpZCA9IGl0ZXItPnZhbHVlOworICAgIEdsb2JhbFZhcmlhYmxlSUQgaWQgPSBp
dGVyLT52YWx1ZTsKICAgICBpZiAoaWQgPT0gSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVy
YXRpb24pIHsKICAgICAgICAgaWQgPSB2bS5nZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpOwotICAg
ICAgICBtX3VuaXF1ZVR5cGVTZXRNYXAtPnNldChrZXksIFR5cGVTZXQ6OmNyZWF0ZSgpKTsgLy9t
YWtlIGEgbmV3IGdsb2JhbCB0eXBlc2V0IGZvciB0aGUgSUQKKyAgICAgICAgbV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGtleSwgaWQpOworICAgICAgICBtX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLnNldChrZXksIFR5cGVTZXQ6OmNy
ZWF0ZSgpKTsgLy8gTWFrZSBhIG5ldyBnbG9iYWwgdHlwZXNldCBmb3IgdGhpcyBjb3JyZXNwb25k
aW5nIElELgogICAgIH0KLSAgICAgICAgIAorCiAgICAgcmV0dXJuIGlkOwogfQogCiBHbG9iYWxW
YXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSkKIHsKLSAgICBh
dXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZmluZChyZWdpc3RlckluZGV4KTsK
LSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVBy
b2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVE
YXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5maW5kKHJlZ2lzdGVySW5kZXgpOworICAgIGF1
dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFw
LmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0
eU5vR2xvYmFsSURFeGlzdHM7CisKICAgICByZXR1cm4gdW5pcXVlSURGb3JWYXJpYWJsZShsb2Nr
ZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xU
YWJsZTo6Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSkKIHsKLSAgICB1bmlxdWVJREZvclJl
Z2lzdGVyKGxvY2tlciwgcmVnaXN0ZXJJbmRleCwgdm0pOyAvL2Vuc3VyZSBpdCdzIGNyZWF0ZWQK
LSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZmluZChyZWdpc3Rlcklu
ZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIHVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2Vy
LCByZWdpc3RlckluZGV4LCB2bSk7IC8vIExhemlseSBjcmVhdGUgdGhlIFR5cGVTZXQgaWYgbmVj
ZXNzYXJ5LgorCisgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVn
aXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQocmVnaXN0ZXJJbmRleCk7CisgICAgYXV0byBlbmQgPSBt
X3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7Cisg
ICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVy
biBnbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpdGVyLT52YWx1ZS5nZXQoKSwgdm0p
OwogfQogCiBSZWZQdHI8VHlwZVNldD4gU3ltYm9sVGFibGU6Omdsb2JhbFR5cGVTZXRGb3JWYXJp
YWJsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFN0cmluZ0ltcGwqIGtleSwg
Vk0mIHZtKQogewotICAgIHVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsKLSAg
ICByZXR1cm4gbV91bmlxdWVUeXBlU2V0TWFwLT5maW5kKGtleSktPnZhbHVlOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIHVuaXF1ZUlERm9yVmFy
aWFibGUobG9ja2VyLCBrZXksIHZtKTsgLy8gTGF6aWx5IGNyZWF0ZSB0aGUgVHlwZVNldCBpZiBu
ZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91
bmlxdWVUeXBlU2V0TWFwLmZpbmQoa2V5KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5k
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMiArNDE3
LDYgQEAgcHVibGljOgogICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBl
bnRyeSkKICAgICB7Ci0gICAgICAgIGlmIChtX3VuaXF1ZUlETWFwKSB7Ci0gICAgICAgICAgICAv
LyBVc2UgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2UgbmVlZCB0byBwcm9kdWNlIGEgdW5pcXVl
IElELiBCZWNhdXNlIFZNIGlzIGluIGNoYXJnZSBvZiBjcmVhdGluZyB1bmlxdWVJRHMsIAotICAg
ICAgICAgICAgLy8gd2hlbiB1bmlxdWVJRCgpIGlzIGNhbGxlZCwgd2UgY2hlY2sgdGhpcyBmbGFn
IHRvIHNlZSBpZiB1bmlxdWVJRCBjcmVhdGlvbiBpcyBuZWNlc3NhcnkuCi0gICAgICAgICAgICBt
X3VuaXF1ZUlETWFwLT5zZXQoa2V5LCBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlv
bik7IAotICAgICAgICAgICAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPnNldChlbnRyeS5nZXRJ
bmRleCgpLCBrZXkpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBl
bnRyeSk7CiAgICAgfQogICAgIApAQCAtNDM0LDEwICs0MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJ
bXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAg
aWYgKG1fdW5pcXVlSURNYXApIHsKLSAgICAgICAgICAgIG1fdW5pcXVlSURNYXAtPnNldChrZXks
IEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKTsgCi0gICAgICAgICAgICBtX3Jl
Z2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGVudHJ5LmdldEluZGV4KCksIGtleSk7Ci0gICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG1fbWFwLnNldChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBA
IC00ODksNiArNDc5LDggQEAgcHVibGljOgogICAgIAogICAgIFN5bWJvbFRhYmxlKiBjbG9uZUNh
cHR1cmVkTmFtZXMoVk0mKTsKIAorICAgIHZvaWQgcHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOworCiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKQEAgLTUxMyw5ICs1MDUsMTIgQEAgcHJpdmF0ZToKICAgICB+U3ltYm9sVGFibGUo
KTsKIAogICAgIE1hcCBtX21hcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURNYXA+IG1f
dW5pcXVlSURNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4g
bV9yZWdpc3RlclRvVmFyaWFibGVNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZVR5cGVT
ZXRNYXA+IG1fdW5pcXVlVHlwZVNldE1hcDsKKyAgICBzdHJ1Y3QgVHlwZVByb2ZpbGluZ1JhcmVE
YXRhIHsKKyAgICAgICAgVW5pcXVlSURNYXAgbV91bmlxdWVJRE1hcDsKKyAgICAgICAgUmVnaXN0
ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwOworICAgICAgICBVbmlxdWVU
eXBlU2V0TWFwIG1fdW5pcXVlVHlwZVNldE1hcDsKKyAgICB9OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCiAgICAg
aW50IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3Ry
aWN0RXZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3Bw
CShyZXZpc2lvbiAxNzE5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTcgKzYyLDE2IEBAIFJ1bnRpbWVUeXBlIFR5
cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAgICBlbHNlIGlmICh2LmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldCA9IFR5cGVPYmplY3Q7CiAgICAgZWxzZQotICAgICAgICBDUkFTSCgpOworICAg
ICAgICByZXQgPSBUeXBlTm90aGluZzsKIAogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgVHlw
ZVNldDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4gc2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKK3ZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0
aW9uKFJ1bnRpbWVUeXBlIHR5cGUsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlLCBT
dHJ1Y3R1cmVJRCBpZCkgCiB7Ci0gICAgUnVudGltZVR5cGUgdCA9IGdldFJ1bnRpbWVUeXBlRm9y
VmFsdWUodik7Ci0gICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHQ7CisgICAgbV9zZWVu
VHlwZXMgPSBtX3NlZW5UeXBlcyB8IHR5cGU7CiAKLSAgICBpZiAoaWQgJiYgc2hhcGUgJiYgIXYu
aXNTdHJpbmcoKSAmJiAhdi5pc0Z1bmN0aW9uKCkpIHsKKyAgICBpZiAoaWQgJiYgc2hhcGUgJiYg
dHlwZSAhPSBUeXBlU3RyaW5nKSB7CiAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9y
eS5pc1ZhbGlkS2V5KGlkKSk7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0
b3J5LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5l
bmQoKSkgewpAQCAtMjE4LDggKzIxNyw2IEBAIFN0cmluZyBUeXBlU2V0OjpkaXNwbGF5TmFtZSgp
IGNvbnN0CiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+
IFR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBpZiAobV9zZWVuVHlwZXMg
JiBUeXBlRnVuY3Rpb24pCi0gICAgICAgICBzZWVuLT5hZGRJdGVtKCJGdW5jdGlvbiIpOwogICAg
IGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpCiAgICAgICAgICBzZWVuLT5hZGRJdGVt
KCJVbmRlZmluZWQiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MTkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtODgsNyArODgsNyBAQCBjbGFzcyBUeXBlU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZVNl
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZVNldD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFR5cGVTZXQpOyB9CiAgICAgVHlwZVNldCgpOwotICAgIHZvaWQgYWRk
VHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVj
dHVyZUlEKTsKKyAgICB2b2lkIGFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5
cGUgZ2V0UnVudGltZVR5cGVGb3JWYWx1ZShKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzE5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyOSwxMSArMzI5LDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgIC8vIHdvbid0IHVzZSB0aGlzLgogICAgIG1fdHlwZWRBcnJheUNvbnRyb2xs
ZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiAKLSAgICAv
LyBGSVhNRTogY29uZGl0aW9uYWxseSBhbGxvY2F0ZSB0aGlzIHN0dWZmIGJhc2VkIG9uIHdoZXRo
ZXIgb3Igbm90IHRoZSBpbnNwZWN0b3IgaXMgcnVubmluZyBPUiB0aGlzIGZsYWcgaXMgZW5hYmxl
ZCAobm90IGp1c3QgaWYgdGhlIGZsYWcgaXMgZW5hYmxlZCkuCi0gICAgaWYgKE9wdGlvbnM6OnBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyPigp
OwotICAgICAgICBtX2hpZ2hGaWRlbGl0eUxvZyA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZpZGVs
aXR5TG9nPigpOwotICAgIH0KKyAgICBpZiAoT3B0aW9uczo6cHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKQorICAgICAgICBlbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CiB9
CiAKIFZNOjp+Vk0oKQpAQCAtOTI2LDYgKzkyMywyNCBAQCB2b2lkIFZNOjpzZXRFbmFibGVkUHJv
ZmlsZXIoTGVnYWN5UHJvZmlsCiAgICAgfQogfQogCit2b2lkIFZNOjplbmFibGVIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcj4oKTsKKyAgICBt
X2hpZ2hGaWRlbGl0eUxvZyA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZpZGVsaXR5TG9nPigpOwor
fQorCit2b2lkIFZNOjpkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpCit7CisgICAg
aWYgKCFpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5yZXNldChudWxscHRyKTsKKyAgICBt
X2hpZ2hGaWRlbGl0eUxvZy5yZXNldChudWxscHRyKTsKK30KKwogdm9pZCBWTTo6ZHVtcEhpZ2hG
aWRlbGl0eVByb2ZpbGluZ1R5cGVzKCkKIHsKICAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDE3MTkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxNyw2ICs1MTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQnVp
bHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1aWx0aW5F
eGVjdXRhYmxlcy5nZXQoKTsgfQogCiAgICAgICAgIGJvb2wgaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSB7IHJldHVybiAhIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOyB9Cisg
ICAgICAgIHZvaWQgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworICAgICAgICB2
b2lkIGRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CiAgICAgICAgIEhpZ2hGaWRl
bGl0eUxvZyogaGlnaEZpZGVsaXR5TG9nKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlMb2cuZ2V0
KCk7IH0KICAgICAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBoaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIoKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5nZXQoKTsgfQog
ICAgICAgICBUeXBlTG9jYXRpb24qIG5leHRMb2NhdGlvbigpIHsgcmV0dXJuIG1fbG9jYXRpb25J
bmZvLmFkZCgpOyB9IC8vVE9ETzogcG9zc2libGUgb3B0bWl6YXRpb246IHdoZW4gY29kZWJsb2Nr
cyBkaWUsIHJlcG9ydCB3aGljaCBsb2NhdGlvbnMgYXJlIG5vIGxvbmdlciBiZWluZyBjaGFuZ2Vk
IHNvIHdlIGRvbid0IHdhbGsgb3ZlciB0aGVtCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236403</attachid>
            <date>2014-08-11 14:31:20 -0700</date>
            <delta_ts>2014-08-11 14:39:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>upload-patch.diff</filename>
            <type>text/plain</type>
            <size>91344</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNDA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNC0wOC0xMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVn
IFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gTWVyZ2VkIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUgYW5kIG9wX2dldF9m
cm9tX3Njb3BlX3dpdGhfcHJvZmlsZSBpbnRvCisgICAgICAgICAgb3BfcHJvZmlsZV90eXBlc193
aXRoX2hpZ2hfZmlkZWxpdHkgYnkgYWRkaW5nIGV4dHJhIGFyZ3VtZW50cyB0byB0aGUgb3Bjb2Rl
LgorICAgICAgICAtIEFsdGVyZWQgU3ltYm9sVGFibGUgdG8gdXNlIGxlc3MgbWVtb3J5IGJ5IGFk
ZGluZyBhIHJhcmUgZGF0YSBzdHJ1Y3R1cmUgZm9yIAorICAgICAgICAgIHR5cGUgcHJvZmlsaW5n
LgorICAgICAgICAtIENyZWF0ZWQgYW4gaW50ZXJmYWNlIHRvIHR1cm4gb24gYW5kIG9mZiB0eXBl
IHByb2ZpbGluZyBmcm9tIHRoZSBXZWIKKyAgICAgICAgICBJbnNwZWN0b3IuCisgICAgICAgIC0g
UmVmYWN0b3JlZCBob3cgZW50cmllcyBhcmUgd3JpdHRlbiB0byBIaWdoRmlkZWxpdHlMb2cgdG8g
bWFrZSBpdAorICAgICAgICAgIGVhc2llciB0byBpbmxpbmUgd2hlbiBnZW5lcmF0aW5nIG1hY2hp
bmUgY29kZS4KKyAgICAgICAgLSBJbXBsZW1lbnRlZCBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICAgYnkgaW5saW5pbmcgdGhl
IHByb2Nlc3Mgb2Ygd3JpdGluZyB0byB0aGUgbG9nIGFuZCBkb2luZyBhIHNtYWxsIGFtb3VudAor
ICAgICAgICAgIG9mIHR5cGUgaW5mZXJlbmNlIG9wdGltaXphdGlvbnMuCisKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNjb3BlRGVwZW5kZW50UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmg6CisgICAg
ICAgIChKU0M6OlR5cGVMb2NhdGlvbjo6VHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1v
dmUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEZyb21TY29wZVdpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpUaGlzTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OkJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRv
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxs
VmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsQnJhY2tl
dE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0QnJhY2tldCk6CisgICAgICAgIChKU0M6OlBv
c3RmaXhOb2RlOjplbWl0RG90KToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9kZTo6ZW1pdFJlc29s
dmUpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0QnJhY2tldCk6CisgICAgICAgIChK
U0M6OlByZWZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6QXNzaWduQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OlJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmV0
dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6VHlwZVJlY29tcGlsZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSW5zcGVjdG9yOjpyZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcp
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SdW50aW1l
Lmpzb246CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk6
CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0RnJvbVNjb3BlQ29t
bW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TExJbnQ6OnB1dFRvU2NvcGVDb21tb24pOiBE
ZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUu
Y3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEdsb2JhbENvZGVCbG9jayk6CisgICAg
ICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAg
KiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0
eUxvZzo6aW5pdGlhbGl6ZUhpZ2hGaWRlbGl0eUxvZyk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRl
bGl0eUxvZzo6fkhpZ2hGaWRlbGl0eUxvZyk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxv
Zzo6cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyk6CisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxp
dHlMb2cuaDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6c3RydWN0
dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5Ojp2
YWx1ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6Omxv
Y2F0aW9uT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpyZWNvcmRUeXBl
SW5mb3JtYXRpb25Gb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6
bG9nRW5kUHRyKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dTdGFydE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRp
b24pOgorICAgICAgICAoSlNDOjpkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50
aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRh
YmxlKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROYW1lcyk6Cisg
ICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpwcmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZyk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6Omdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZSk6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnNldCk6CisgICAgICAgICogcnVudGltZS9UeXBl
U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSk6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAgIChK
U0M6OlR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlU2V0
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjplbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAg
ICAgKEpTQzo6Vk06OmRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDgtMTEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1
ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNzI0MDEu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw5ICsxMDksNyBAQAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJpbWl0aXZlIiwgImxlbmd0aCIgOiAzIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0aCIgOiA2
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIsICJsZW5ndGgi
IDogOCB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9w
cm9maWxlIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRf
dG9fc2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF90b19zY29wZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDQgfSwKQEAgLTEy
Miw3ICsxMjAsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV93aWxsX2Nh
bGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVf
ZGlkX2NhbGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Vu
ZCIsICJsZW5ndGgiIDogMiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV90
eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5IiwgImxlbmd0aCIg
OiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hhc19pbmRleGVk
X3Byb3BlcnR5IiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTcy
NDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAg
IGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CkBAIC0xMjMsNyArMTIyLDYgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
T2Zmc2V0KAogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3Bf
aW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKICAgICBjYXNlIG9wX2dldF9ieV9pZDoK
QEAgLTI1MSw3ICsyNDksNiBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29k
ZUJsCiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CiAgICAgY2FzZSBvcF9wdXNoX3dpdGhf
c2NvcGU6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2Nv
cGVfd2l0aF9wcm9maWxlOgogICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgogICAgIGNhc2Ugb3BfZW5k
OgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CkBAIC0zMjEsNyArMzE4LDYgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfbmV3X2Z1
bmNfZXhwOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9j
YWxsX2V2YWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MjMsNyArMTUyMyw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICAgICAgb3BlcmFuZCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBpZDAgPSAo
KytpdCktPnUub3BlcmFuZDsKQEAgLTE1MzIsOCArMTUzMSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1cmUKICAgICAgICAgICAg
IGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJhbmQKICAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF90b19zY29w
ZSIpOwotICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9m
aWxlKQotICAgICAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAldTwlc3wlcz4sIDxzdHJ1Y3R1cmU+LCAlZCIsCiAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBtb2RlQW5kVHlwZS5v
cGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkpLCByZXNvbHZlVHlw
ZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKQEAgLTE3MTYsNiArMTcxMywxMSBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgYm9vbCBkaWRDbG9uZVN5bWJv
bFRhYmxlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSB7CisgICAgICAgIGlmIChtX3ZtLT5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wcmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhsb2NrZXIpOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5z
ZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZS0+Y2xvbmVDYXB0
dXJlZE5hbWVzKCptX3ZtKSk7CiAgICAgICAgICAgICBkaWRDbG9uZVN5bWJvbFRhYmxlID0gdHJ1
ZTsKQEAgLTE5NDksMTMgKzE5NTEsMTEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNl
IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZTogewotICAgICAgICAgICAgaW50IG9mZnNldCA9IChwY1swXS51Lm9wY29kZSA9PSBv
cF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgPyAyIDogMSk7Ci0gICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gb2Zmc2V0
XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFs
dWVQcm9maWxlc1twY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZF07CiAgICAgICAgICAgICBBU1NF
UlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CiAgICAgICAgICAgICBwcm9maWxl
LT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BM
ZW5ndGggLSBvZmZzZXRdID0gcHJvZmlsZTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
b3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CiAKICAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3Bl
IGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAog
ICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUu
b3BlcmFuZCk7CkBAIC0xOTY5LDE2ICsxOTY5LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5z
dHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAgICBpZiAocGNbMF0udS5vcGNvZGUgPT0g
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBnZXRfZnJvbV9zY29wZV93aXRoX3Byb2Zp
bGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5k
LCAuLi4sIFR5cGVMb2NhdGlvbgotICAgICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9m
ZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShvcCwgaWRlbnQsIGluc3RydWN0aW9uT2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDhdLnUubG9jYXRpb24gPSBs
b2NhdGlvbjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICBjYXNl
IG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBp
ZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCiAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5k
KTsKQEAgLTE5OTUsMzAgKzE5ODgsNTAgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAgICBpZiAocGNbMF0udS5vcGNvZGUgPT0gb3BfcHV0
X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQg
b2YgdGhpcyBpbnN0cnVjdGlvbiBpczogcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBzY29wZSwg
aWQsIHZhbHVlLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZCwgVHlwZUxv
Y2F0aW9uKgotICAgICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBv
cExlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNj
b3BlRGVwZW5kZW50UHJvZmlsZShvcCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDddLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eTogeworICAgICAgICAgICAgLy8g
VGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWNpdG9uIGlzOiBvcF9wcm9maWxlX3R5cGVzX3dpdGhf
aGlnaF9maWRlbGl0eSByZWdUb1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZp
ZXI/LCByZXNvbHZlVHlwZT8KICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9
IGkgKyBvcExlbmd0aCAtIDE7CiAgICAgICAgICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZDsKICAgICAgICAgICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRDsKICAg
ICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OwogICAgICAgICAgICAgYm9v
bCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
RXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKLQorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgUHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnID0gc3RhdGljX2Nhc3Q8UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZz4ocGNbM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7CisKICAgICAgICAg
ICAgIHN3aXRjaCAoZmxhZykgeworICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29k
ZVB1dFRvU2NvcGU6CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJv
bVNjb3BlOiB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgUmVzb2x2ZVR5cGUgdHlw
ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihwY1s1XS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQsIChmbGFnID09IFByb2ZpbGVUeXBlc0J5
dGVjb2RlR2V0RnJvbVNjb3BlID8gR2V0IDogUHV0KSwgdHlwZSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBhbmQgYWxz
byBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRlcm1pbmUg
dGhlIGdsb2JhbElECisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTE4NAorICAgICAgICAgICAgICAgIGlmIChvcC50eXBlID09IENs
b3N1cmVWYXIpCisgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gb3AuYWN0aXZhdGlv
bi0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcC50eXBlID09IEds
b2JhbFZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBtX2dsb2JhbE9iamVj
dC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sVGFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGVyZSBpcyBhIGNoYW5jZSB3ZSBtYXkgZ3Jh
YiBhIFN5bWJvbCBUYWJsZSB0aGF0IGhhc24ndCBiZWVuIHByZXBhcmVkIGZvciBwcm9maWxpbmcg
ZnJvbSBhbiBvdXRlciBzY29wZS4KKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJs
ZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgICAgICBnbG9i
YWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIs
IGlkZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0
czsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEOiB7CisgICAgICAgICAgICAgICAg
c3ltYm9sVGFibGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwogICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JSZWdpc3Rlcihs
b2NrZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwotICAgICAgICAgICAgICAg
IGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGxv
Y2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tl
ciwgcHJvZmlsZVJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgZ2xv
YmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2Vy
LCBwcm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElEOiAKQEAgLTIwMjYsMTAgKzIwMzksNiBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFi
bGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RnVuY3Rpb25UaGlzT2JqZWN0OiB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25S
ZXR1cm5TdGF0ZW1lbnQ6IHsKICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gcmV0dXJu
U3RhdGVtZW50VHlwZVNldCgpOwogICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBI
aWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQ7CkBAIC0yMDQzLDcgKzIwNTIsOCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2Nh
dGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9u
Q2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsIG1fb3duZXJFeGVjdXRh
YmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0o
KSk7CisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25Q
YWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hl
KCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAorICAgICAgICAgICAgICAgIG1f
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFs
VHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9j
YXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRp
b25QYWlyLnNlY29uZDsKIApAQCAtMjUyNCw5ICsyNTM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGFjdGl2YXRpb24uY2xlYXIo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICAgICAgY2FzZSBvcF9n
ZXRfZnJvbV9zY29wZToKLSAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJv
ZmlsZToKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0KICAgICAgICAgICAgICAgICAgICAg
UmVzb2x2ZU1vZGVBbmRUeXBlKGN1ckluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CkBAIC0zOTM1
LDM1ICszOTQzLDQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaQog
fQogI2VuZGlmCiAKLVR5cGVMb2NhdGlvbiogQ29kZUJsb2NrOjpzY29wZURlcGVuZGVudFByb2Zp
bGUoUmVzb2x2ZU9wIG9wLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc2l6ZV90IGluc3RydWN0
aW9uT2Zmc2V0KQotewotICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOwotICAgIGJv
b2wgc2hvdWxkQW5hbHl6ZSA9IG1fdW5saW5rZWRDb2RlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZUV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90
U3RhcnQsIGRpdm90RW5kKTsKLSAgICBHbG9iYWxWYXJpYWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQ7
Ci0gICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7Ci0KLSAgICAvLyBGSVhNRTogaGFu
ZGxlIG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBhbmQgYWxzbyBjb25zaWRlciB3aGF0
IHRvIGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRlcm1pbmUgdGhlIGdsb2JhbElECi0g
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKLSAgICBpZiAob3AudHlwZSA9
PSBDbG9zdXJlVmFyKSAKLSAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1i
b2xUYWJsZSgpOwotICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQotICAgICAgICBz
eW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1ib2xUYWJsZSgpOwotICAgIAot
ICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJv
bFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7
Ci0gICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZh
cmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOwotCi0gICAg
c3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtKCktPmhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRUeXBlTG9jYXRp
b24oZ2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90
U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKLSAgICBUeXBlTG9jYXRpb24q
IGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwotICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9
IGxvY2F0aW9uUGFpci5zZWNvbmQ7Ci0KLSAgICBpZiAoc2hvdWxkQW5hbHl6ZSAmIGlzTmV3TG9j
YXRpb24pCi0gICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5pbnNlcnRO
ZXdMb2NhdGlvbihsb2NhdGlvbik7Ci0KLSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIwLDggKzEwMjAsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJlRGF0YSk7CiAg
ICAgfQogCi0gICAgVHlwZUxvY2F0aW9uKiBzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9w
LCBjb25zdCBJZGVudGlmaWVyJiwgc2l6ZV90KTsKLSAgICAKICNpZiBFTkFCTEUoSklUKQogICAg
IHZvaWQgcmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiAgICAgdm9pZCByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1R5cGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9UeXBlTG9jYXRpb24uaAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMiAr
MzMsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBlbnVtIEhpZ2hGaWRlbGl0eUdsb2JhbElERmxhZ3Mg
ewogICAgIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uID0gLTEsCiAgICAgSGln
aEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0cyA9IC0yLAotICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudCA9IC0zLAotICAgIEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPSAtNAorICAgIEhp
Z2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zCiB9OwogCiB0eXBlZGVmIGludHB0cl90IEds
b2JhbFZhcmlhYmxlSUQ7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbiB7CiBwdWJsaWM6Ci0gICAgVHlw
ZUxvY2F0aW9uKCkgCi0gICAgICAgIDogbV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5T
dGF0ZW1lbnQoVUlOVF9NQVgpCisgICAgVHlwZUxvY2F0aW9uKCkKKyAgICAgICAgOiBtX2xhc3RT
ZWVuVHlwZShUeXBlTm90aGluZykKKyAgICAgICAgLCBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJ
ZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkKICAgICAgICAgLCBtX2luc3RydWN0aW9uVHlwZVNl
dChUeXBlU2V0OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2dsb2JhbFR5cGVTZXQobnVsbHB0cikK
ICAgICB7CiAgICAgfQogCiAgICAgR2xvYmFsVmFyaWFibGVJRCBtX2dsb2JhbFZhcmlhYmxlSUQ7
CisgICAgUnVudGltZVR5cGUgbV9sYXN0U2VlblR5cGU7CiAgICAgaW50cHRyX3QgbV9zb3VyY2VJ
RDsKICAgICB1bnNpZ25lZCBtX2Rpdm90U3RhcnQ7CiAgICAgdW5zaWduZWQgbV9kaXZvdEVuZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDggKzExNSwxMyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoCiAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKIAotICAgIGlmIChtX2Nv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT52bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5wcmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Zyhsb2NrZXIpOworICAgICAgICB9CiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1ib2xUYWJs
ZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX2NvZGVC
bG9jay0+dm0oKSkpOworICAgIH0KIAogICAgIGlmIChtX2V4cHJlc3Npb25Ub29EZWVwKQogICAg
ICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJyb3I6Ok91dE9mTWVtb3J5KTsKQEAgLTEw
MDUsNyArMTAxMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSgK
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5k
ZXgoKSkpOwogCiAgICAgaWYgKCFkc3QtPmlzVGVtcG9yYXJ5KCkgJiYgaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEKTsKKyAgICAgICAgZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhh
c0dsb2JhbElELCBudWxscHRyKTsKIAogICAgIHJldHVybiBkc3Q7CiB9CkBAIC0xMTI0LDEyICsx
MTI5LDE4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdoRmlkZWxpdHkKICAgICBt
X2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uSW5mbyhpbnN0
cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Q
cm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcpCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShS
ZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eUJ5dGVjb2RlRmxhZyBmbGFnLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQogeworICAg
IGlmIChmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlIHx8IGZsYWcgPT0g
UHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChp
ZGVudGlmaWVyKTsKKworICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjaXRvbiBpczog
b3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkgcmVnVG9Qcm9maWxlLCBUeXBlTG9j
YXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/CiAgICAgZW1pdE9wY29kZShv
cF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlZ2lzdGVyVG9Qcm9maWxlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIFR5cGVMb2NhdGlvbiBv
YmplY3QgcG9pbnRlci4KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGZsYWcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpZGVudGlm
aWVyID8gYWRkQ29uc3RhbnQoKmlkZW50aWZpZXIpIDogMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVUeXBlKCkpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCkBAIC0xMjcxLDIyICsxMjgyLDYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcgogICAgIHJldHVybiBk
c3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNjb3Bl
V2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9j
b2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKLQotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRP
cGNvZGUob3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVy
KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZl
TW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMg
aXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRpb24gcG9pbnRlci4KLSAgICByZXR1cm4g
ZHN0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKICAgICBtX2NvZGVCbG9jay0+
YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAt
MTMwMiwyMSArMTI5Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
VG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUgcmVzb2x2
ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX3Njb3Bl
X3dpdGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUo
KSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhp
cyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2ludGVyLgotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5j
ZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQ
cm90b3R5cGUpCiB7IAogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMywxMiArMjIz
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUcnlEYXRhKiB0cnlEYXRhOwogICAgIH07
CiAKLSAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeyAK
KyAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgeworICAg
ICAgICBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsCisgICAgICAgIFByb2ZpbGVUeXBl
c0J5dGVjb2RlR2V0RnJvbVNjb3BlLAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0ds
b2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
CiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudCwKLSAgICAgICAg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3QsCi0gICAgICAgIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQgIAorICAgICAgICBQcm9maWxlVHlw
ZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50CiAgICAgfTsKIAogICAgIGNsYXNzIEJ5
dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTQxMCw3ICs0MTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHBy
ZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGVuZERpdm90KTsKLSAgICAgICAgdm9pZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcpOworICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5Qnl0ZWNvZGVGbGFnLCBjb25zdCBJZGVudGlmaWVyKik7CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAtNDc3LDkgKzQ3OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSgpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZl
TW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVz
b2x2ZU1vZGUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9k
ZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0
ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2
ZU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCopOwog
ICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTcyNDAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDE0IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIHsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisKKyAg
ICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgaWYgKGdlbmVyYXRvci5pc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05v
dEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0
aGlzTGVuZ3RoID0gNDsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8ocG9zaXRpb24oKSwgSlNUZXh0UG9zaXRpb24oLTEsIHBvc2l0
aW9uKCkub2Zmc2V0ICsgdGhpc0xlbmd0aCwgLTEpKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNjAsNyBAQCBSZWdpc3Rl
cklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgICAgIGlmIChkc3QgPT0gZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBp
ZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShsb2NhbC5n
ZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNHbG9iYWxJRCk7CisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkobG9jYWwuZ2V0KCksIFByb2Zp
bGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8obV9wb3NpdGlv
biwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgo
KSwgLTEpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5nZXQoKSk7CkBAIC0xNjIsMTIgKzE2OSwxMiBAQCBS
ZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgSlNUZXh0UG9zaXRp
b24gZGl2b3QgPSBtX3N0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90LCBtX3N0YXJ0LCBkaXZvdCk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBtX2lkZW50KTsKLSAgICBSZWdpc3RlcklEKiByZXQ7CisgICAgUmVn
aXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAg
ICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmaW5hbERlc3Qs
IHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICByZXQgPSBn
ZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZVdpdGhQcm9maWxlKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0
LCBQcm9maWxlVHlwZXNCeXRlY29kZUdldEZyb21TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhtX3Bv
c2l0aW9uLCBKU1RleHRQb3NpdGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxl
bmd0aCgpLCAtMSkpOwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdl
dEZyb21TY29wZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzY29wZS5nZXQoKSwg
bV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KIApA
QCAtMzg3LDcgKzM5NCw3IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRC
eXQKICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmlu
YWxEZXN0LCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgfQogICAgIHJldHVybiByZXQ7CkBAIC00MTMsNyArNDIwLDcgQEAgbm9uQXJndW1lbnRzUGF0
aDoKICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5h
bERlc3QsIGJhc2UsIG1faWRlbnQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAg
ICByZXR1cm4gcmV0OwpAQCAtNDk3LDcgKzUwNCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdEIKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShy
ZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJl
dHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmV0OwpAQCAtNTE4LDcgKzUyNSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWkKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qg
b25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCiAgICAgICAgIFJlZ2lzdGVySUQqIHJl
dCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTUzNCw3ICs1NDEs
NyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBn
ZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShy
ZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJl
dHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmV0OwpAQCAtNTUzLDcgKzU2MCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJy
YWNrZXROb2RlOjplbWkKICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0
dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1
cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBu
dWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIHJldDsKQEAgLTU3MSw3ICs1NzgsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3RO
b2RlOjplbWl0Qnl0CiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICBSZWdpc3RlcklEKiBy
ZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90
SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNjQ1LDcgKzY1Miw3IEBAIFJlZ2lzdGVySUQqIENh
bGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChl
bmQuZ2V0KCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05v
dEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKQEAgLTc1OSw3ICs3NjYsNyBA
QCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlw
ZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBA
IC04MTQsMTEgKzgyMSwxMSBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUo
Qnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
U2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG9sZFZhbHVlID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsK
KyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5n
ZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
V2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZv
dW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJv
d0lmTm90Rm91bmQpOworICAgIH0KIAogICAgIHJldHVybiBvbGRWYWx1ZS5nZXQoKTsKIH0KQEAg
LTg0Miw3ICs4NDksNyBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJyYWNrZXQoQnl0
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJv
cGVydHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURv
ZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IG9sZFZhbHVlKTsKQEAgLTg2Niw3ICs4NzMsNyBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6
ZW1pdERvdChCeXRlY29kCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChi
YXNlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgb2xkVmFsdWUpOwpAQCAtMTAwMiwxMSArMTAwOSwxMSBAQCBSZWdpc3RlcklEKiBQcmVm
aXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBpZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRH
ZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQs
IFRocm93SWZOb3RGb3VuZCk7CiAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0
KCksIG1fb3BlcmF0b3IpOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQo
KSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdl
dCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9T
Y29wZSwgJmlkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVs
c2UgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQs
IHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB2YWx1ZS5nZXQoKSk7CiB9CiAKQEAg
LTEwMjcsNyArMTAzNCw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5
dGUKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBw
cm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhw
cmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7
CkBAIC0xMDQ5LDcgKzEwNTYsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0RG90KEJ5
dGVjb2RlCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgp
LCBpZGVudCwgdmFsdWUpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2
YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lv
bkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CkBAIC0x
NTIwLDEyICsxNTI3LDExIEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1p
dEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVT
Y29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIG1faWRlbnQpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5l
cmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1
ZS5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVu
a25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwotICAgIFJl
Z2lzdGVySUQqIHJldDsgCisgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRU
b1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3Vu
ZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNj
b3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXN1bHQuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0
b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhy
b3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTU1OSwxMiAr
MTU2NSwxMSBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjCiAgICAg
ICAgIGRzdCA9IDA7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICBSZWdpc3RlcklEKiByZXQ7
CisgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdl
dCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRo
cm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJl
c3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDog
RG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkocmVzdWx0LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRv
U2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgp
LCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93
SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9IAogICAgIHJldHVybiBy
ZXQ7CiB9CiAKQEAgLTE1NzksNyArMTU4NCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6
OmVtaXRCeXRlY29kZSgKICAgICBSZWdpc3RlcklEKiBmb3J3YXJkUmVzdWx0ID0gKGRzdCA9PSBn
ZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6IGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24ocmVzdWx0KSwgcmVzdWx0
KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgZm9yd2Fy
ZFJlc3VsdCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
Zm9yd2FyZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBu
dWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3Vs
dCk7CkBAIC0xNTk4LDcgKzE2MDMsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6
ZW1pdEJ5dGVjCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFsdWUpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQ
cm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtMTYyNCw3ICsx
NjI5LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduQnJhY2tldE5vZGU6OmVtaXRCeXRlYwogICAgIFJl
Z2lzdGVySUQqIGZvcndhcmRSZXN1bHQgPSAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0
KCkpID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihyZXN1bHQpLCByZXN1bHQpOwogICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIGZvcndhcmRSZXN1bHQpOwogICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJl
c3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRSZXN1bHQpOwpAQCAtMTY0NCw3
ICsxNjQ5LDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0QgogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5
LmdldCgpLCB1cGRhdGVkVmFsdWUpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZl
R2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IH0KIApAQCAtMjI1MSw3ICsyMjU2LDcgQEAgdm9pZCBSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblJlZ2lzdGVyID0gbV92
YWx1ZSA/IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fdmFsdWUpIDogZ2VuZXJhdG9yLmVtaXRM
b2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5SZWdpc3Rlci5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5SZWdpc3Rlci5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCwgbnVsbHB0cik7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3Iuc2NvcGVEZXB0
aCgpKSB7CkBAIC0yNTgyLDE3ICsyNTg3LDEzIEBAIHZvaWQgRXZhbE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmUKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBKU1RleHRQ
b3NpdGlvbiBzdGFydCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0LCAtMSk7IC8vIFRoaXMgZGl2b3Qg
aXMgYXQgdGhlIG9wZW4gYnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLgotICAgICAgICBKU1RleHRQb3Np
dGlvbiBlbmQoLTEsIG1fc3RhcnRTdGFydE9mZnNldCArIDEsIC0xKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGdlbmVyYXRvci50aGlzUmVnaXN0
ZXIoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3QpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhzdGFy
dCwgZW5kKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmFtZXRlcnMtPnNp
emUoKTsgaSsrKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIERlc3RydWN0dXJpbmcg
YXNzaWdubWVudHMgaW50byBhcmd1bWVudHMuCiAgICAgICAgICAgICBpZiAoIW1fcGFyYW1ldGVy
cy0+YXQoaSktPmlzQmluZGluZ05vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIEJpbmRpbmdOb2RlKiBwYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9k
ZSo+KG1fcGFyYW1ldGVycy0+YXQoaSkpOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCByZWcoQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoJnJlZywgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5j
dGlvbkFyZ3VtZW50KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgmcmVnLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQs
IG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8ocGFyYW1ldGVyLT5kaXZvdFN0YXJ0KCksIHBhcmFtZXRlci0+
ZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNjE0LDcgKzI2MTUsNyBAQCB2b2lk
IEZ1bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiAgICAgaWYgKCFyZXR1cm5Ob2Rl
KSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/
IGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSA6IGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKQotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHIwLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50
KTsgLy8gRG8gbm90IGVtaXQgZXhwcmVzc2lvbiBpbmZvIGZvciB0aGlzIHByb2ZpbGUgYmVjYXVz
ZSBpdCdzIG5vdCBpbiB0aGUgdXNlcidzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50LCBudWxscHRyKTsgLy8gRG8gbm90IGVtaXQgZXhw
cmVzc2lvbiBpbmZvIGZvciB0aGlzIHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNl
cidzIHNvdXJjZSBjb2RlLgogICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQoKSA+PSBsaW5lU3Rh
cnRPZmZzZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNh
bGxGcmFtZSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFJldHVybihyMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAi
Q29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUg
IkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5o
IgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCkBAIC00Niw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKQEAgLTE5OSw4ICsyMDEsMTAgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldFJ1bnRpbWVUeQogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwogICAgIHR5cGVEZXNjcmlwdGlvbnMgPSBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAoIXZtLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgaWYgKCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiVGhl
IFZNIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIFR5cGUgSW5mb3JtYXRpb24uIik7CiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBkb3VibGUgc3RhcnQgPSBjdXJyZW50VGltZU1TKCk7CiAg
ICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIlVzZXIgUXVl
cnkiKTsKQEAgLTIzMSw2ICsyMzUsNzEgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFJ1bnRpbWVUeQogICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNG
b3JWYXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZtc1xuIiwgZW5kIC0gc3RhcnQpOwogfQogCitj
bGFzcyBUeXBlUmVjb21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3Igewor
cHVibGljOgorICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsK
KyAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOworICAgICAgICBleGVj
dXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOworICAgICAgICBleGVjdXRhYmxlLT5j
bGVhclVubGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygpOworICAgIH0K
K307CisKK3N0YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGlu
ZyhWTSYgdm0sIGJvb2wgc2hvdWxkRW5hYmxlVHlwZVByb2ZpbGluZykKK3sKKyAgICAvLyBJZiB3
ZSBhcmUgYWxyZWFkeSBtYXRjaGluZyB0aGUgdHlwZSBwcm9maWxpbmcgc3RhdGUgaW4gdGhlIFZN
LCBkb24ndCBib3RoZXIgcmVjb21waWxpbmcuCisgICAgaWYgKHNob3VsZEVuYWJsZVR5cGVQcm9m
aWxpbmcgPT0gdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgdm0ud2FpdEZvckNvbXBpbGF0aW9uc1RvQ29tcGxldGUoKTsKKworICAg
IGlmIChzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKQorICAgICAgICB2bS5lbmFibGVIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAgZWxzZQorICAgICAgICB2bS5kaXNhYmxlSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZygpOworCisgICAgVHlwZVJlY29tcGlsZXIgcmVjb21waWxlcjsK
KyAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUodm0uaGVhcCk7CisgICAgdm0u
aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgcmVjb21w
aWxlcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxWTSgp
OworICAgIGlmICh2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNh
ZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKKyAgICAvLyB1cCB0aHJvd2luZyBhd2F5
IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KKyAgICBpZiAodm0uZW50cnlTY29wZSkg
eworICAgICAgICB2bS5lbnRyeVNjb3BlLT5zZXRFbnRyeVNjb3BlRGlkUG9wTGlzdGVuZXIodGhp
cywKKyAgICAgICAgICAgIFtdIChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikgeworICAgICAgICAg
ICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyh2bSwgdHJ1ZSk7
IAorICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZQorICAgICAgICByZWNvbXBp
bGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHRydWUpOworfQorCit2b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoRXJy
b3JTdHJpbmcqKQoreworICAgIFZNJiB2bSA9IGdsb2JhbFZNKCk7CisgICAgaWYgKCF2bS5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAodm0uZW50cnlTY29wZSkgeworICAgICAgICB2bS5lbnRyeVNjb3BlLT5zZXRFbnRyeVNjb3Bl
RGlkUG9wTGlzdGVuZXIodGhpcywKKyAgICAgICAgICAgIFtdIChWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KikgeworICAgICAgICAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVBy
b2ZpbGluZyh2bSwgZmFsc2UpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKHZtLCBm
YWxzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCShyZXZpc2lvbiAx
NzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBy
dW4oRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3Jp
cHRpb24+PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRp
c2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CiAg
ICAgCiAgICAgdm9pZCBzZXRTY3JpcHREZWJ1Z1NlcnZlcihTY3JpcHREZWJ1Z1NlcnZlciogc2Ny
aXB0RGVidWdTZXJ2ZXIpIHsgbV9zY3JpcHREZWJ1Z1NlcnZlciA9IHNjcmlwdERlYnVnU2VydmVy
OyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVu
dGltZS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvUnVudGltZS5qc29uCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDYgKzIzOSwxNCBAQAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiVHlwZURlc2NyaXB0aW9uIiwgImRl
c2NyaXB0aW9uIjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFibGUuIiB9IH0KICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBkZXRhaWxlZCBpbmZv
cm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJlbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGVzIGhpZ2ggZmlkZWxpdHkgdHlwZSBwcm9maWxp
bmcgb24gdGhlIFZNLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkRpc2FibGVzIGhpZ2ggZmlkZWxpdHkgdHlwZSBwcm9maWxpbmcgb24gdGhlIFZN
LiIKICAgICAgICAgfQogICAgIF0sCiAgICAgImV2ZW50cyI6IFsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpTU0UyQ2hlY2tTCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNp
bmNsdWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTI2Nyw2ICsy
NjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklO
RV9PUChvcF9pbmMpCiAgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX2RpZF9jYWxsKQogICAg
ICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV93aWxsX2NhbGwpCisgICAgICAgIERFRklORV9PUChv
cF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKICAgICAgICAgREVGSU5FX09QKG9w
X3B1c2hfbmFtZV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfd2l0aF9zY29wZSkK
ICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CkBAIC00OTgsNiArNTAwLDEw
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYg
REZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQorCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgbW9zdCB1cCB0byBk
YXRlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBwZXJmb3JtaW5nIHR5cGVjaGVjayBvcHRpbWl6YXRp
b25zIGZvciBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eS4KKyAgICBpZiAobV92
bS0+aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgbV92bS0+aGln
aEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIlByZXBhcmluZyBmb3IgSklU
IGNvbXBpbGF0aW9uLiIpOwogICAgIAogICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHko
KSB8fCBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gYWRvcHRQdHIobmV3IEpJVERpc2Fzc2VtYmxlcihtX2NvZGVCbG9jaykpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9uYW1lX3Njb3BlKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTcyNDAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzA4LDYgKzEzMDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5k
ZXhfc3RyaW5nKEluc3RydQogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJT
bG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMzM4LDYgKzEzNDAsNzIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydQogICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG9f
aW5kZXhfc3RyaW5nKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRpb247CisgICAgaW50IHZhbHVlVG9Qcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIEp1bXBMaXN0IGp1
bXBUb0VuZDsKKworICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlm
IHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgorICAg
IC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0
LWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgorICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5k
KGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSkpKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZU51bGwpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSk7
CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5
cGVCb29sZWFuKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2Zp
bGUsIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH4xKSwgcmVnVDApOworICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0
KFZhbHVlRmFsc2UpKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVNYWNoaW5lSW50KSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChl
bWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCkpOworICAgIH0gZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAganVt
cFRvRW5kLmFwcGVuZChlbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7CisgICAgfSBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcp
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDAp
OworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwor
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsK
KyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgSGlnaEZpZGVsaXR5
TG9nKiBjYWNoZWRIaWdoRmlkZWxpdHlMb2cgPSBtX3ZtLT5oaWdoRmlkZWxpdHlMb2coKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkSGlnaEZpZGVsaXR5TG9nKSwgcmVnVDIpOworICAg
IC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGludG8gVDEuCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBIaWdoRmlkZWxpdHlMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEp
OworCisgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7CisgICAgc3Rv
cmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9j
YXRpb25PZmZzZXQoKSkpOworCisgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb24gdGhlIGxvZyBl
bnRyeS4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7
CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dF
bnRyeTo6dmFsdWVPZmZzZXQoKSkpOworCisgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9m
IHRoZSBjZWxsIGlmIFQwIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwLCBvbiB0aGUgbG9n
IGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9n
OjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIEp1bXAgc2tpcElzQ2VsbCA9
IGp1bXAoKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBza2lwSXNDZWxsLmxpbmsodGhpcyk7CisKKyAgICAvLyBJbmNy
ZW1lbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
aXplb2YoSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeSkpLCByZWdUMSk7CisgICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5TG9nOjpjdXJyZW50TG9nRW50cnlPZmZz
ZXQoKSkpOworICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbVB0cihjYWNoZWRIaWdoRmlkZWxpdHlMb2ctPmxvZ0VuZFB0cigpKSk7Cisg
ICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DbGVhckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlckxvZyk7
CisgICAgc2tpcENsZWFyTG9nLmxpbmsodGhpcyk7CisKKyAgICBqdW1wVG9FbmQubGluayh0aGlz
KTsKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5k
bGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgogI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhvc3RD
YWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtMTkyMSw2ICsxOTIyLDExIEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3QKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOwogfQogCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2xlYXJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXJMb2co
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5TG9nKCktPnBy
b2Nlc3NIaWdoRmlkZWxpdHlMb2coIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNpZGUgYmFzZWxp
bmUgSklUIik7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgogCiAvLyBOb3RlOiBnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0R2VuZXJpCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
eHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90
KTsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNsZWFySGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyTG9nKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRlcm4gIkMiCiAK
IGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtGb3IoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MCwxNSArNTQwLDYgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25ld19yZWdleAogICAgIExMSU5UX1JFVFVSTihSZWdFeHBPYmplY3Q6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnRXhwKSk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSBwY1syXS51LmxvY2F0aW9uOwotICAgIEpTVmFsdWUgdmFsID0g
TExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29y
ZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbCwgbG9jYXRpb24pOwotICAgIExMSU5UX0VO
RF9JTVBMKCk7Ci19Ci0KIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jaGVja19oYXNf
aW5zdGFuY2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTEzNzUsOCArMTM2NiwxMCBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zCiAgICAgTExJTlRfUkVUVVJO
KEpTU2NvcGU6OnJlc29sdmUoZXhlYywgZXhlYy0+c2NvcGUoKSwgaWRlbnQpKTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rp
b24qIHBjLCBWTSYgdm0pCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21f
c2NvcGUpCiB7CisgICAgTExJTlRfQkVHSU4oKTsKKwogICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUCgyKS5qc1ZhbHVl
KCkpOwogICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQp
OwpAQCAtMTM4NCw4ICsxMzc3LDggQEAgc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9u
KEV4ZWNTdAogICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKICAgICBpZiAoIXNjb3BlLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7CiAgICAgICAgIGlmIChtb2RlQW5k
VHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCkpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IExMSU5UX1JFVFVSTihleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKSk7CisgICAgICAgIExMSU5UX1JFVFVSTihq
c1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4g
U2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4n
dCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KQEAgLTE0MDIsMjcgKzEz
OTUsMTMgQEAgc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4ZWNTdAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpCi17Ci0gICAg
TExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4
ZWMsIHBjLCB2bSk7Ci0gICAgTExJTlRfUkVUVVJOKHZhbHVlKTsKKyAgICBMTElOVF9SRVRVUk4o
c2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKQorTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBnZXRGcm9tU2NvcGVDb21tb24oZXhlYywgcGMsIHZtKTsKLSAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gcGNbOF0udS5sb2NhdGlvbjsKLSAgICB2bS5oaWdoRmlkZWxp
dHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsdWUsIGxvY2F0aW9u
KTsKLSAgICBMTElOVF9SRVRVUk4odmFsdWUpOwotfQogCi1zdGF0aWMgSlNPYmplY3QqIHB1dFRv
U2NvcGVDb21tb24oRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMpCi17CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwogICAg
IEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KExMSU5UX09QKDEpLmpzVmFsdWUo
KSk7CkBAIC0xNDMwLDM1ICsxNDA5LDEzIEBAIHN0YXRpYyBKU09iamVjdCogcHV0VG9TY29wZUNv
bW1vbihFeGVjU3QKICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZl
TW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKIAogICAgIGlmIChtb2RlQW5kVHlwZS5tb2Rl
KCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQp
KQotICAgICAgICByZXR1cm4gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVu
dCk7CisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhl
YywgaWRlbnQpKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKTsKICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIENvbW1vblNsb3dQYXRoczo6dHJ5
Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNjb3BlLCBtb2RlQW5k
VHlwZSwgc2xvdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAg
IEpTT2JqZWN0KiBlcnJvciA9IHB1dFRvU2NvcGVDb21tb24oZXhlYywgcGMpOwotICAgIGlmIChl
cnJvcikKLSAgICAgICAgTExJTlRfVEhST1coZXJyb3IpOwotICAgIExMSU5UX0VORCgpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmls
ZSkKLXsKLSAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgdGhlIHNhbWUg
YXMgcHV0X3RvX3Njb3BlIHdpdGggYSBUeXBlTG9jYXRpb24gYXBwZW5kZWQ6IHB1dF90b19zY29w
ZV93aXRoX3Byb2ZpbGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1
Y3R1cmUsIE9wZXJhbmQsIFR5cGVMb2NhdGlvbioKLSAgICBMTElOVF9CRUdJTigpOwotICAgIEpT
T2JqZWN0KiBlcnJvciA9IHB1dFRvU2NvcGVDb21tb24oZXhlYywgcGMpOwotICAgIGlmIChlcnJv
cikKLSAgICAgICAgTExJTlRfVEhST1coZXJyb3IpOwotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRp
b24gPSBwY1s3XS51LmxvY2F0aW9uOwotICAgIEpTVmFsdWUgdmFsID0gTExJTlRfT1BfQygzKS5q
c1ZhbHVlKCk7Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1hdGlv
bkZvckxvY2F0aW9uKHZhbCwgbG9jYXRpb24pOwogICAgIExMSU5UX0VORCgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkocmV2aXNp
b24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMCArMTE4LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9wcgogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9oYW5kbGVfZXhjZXB0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfcmVzb2x2ZV9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2dldF9mcm9tX3Njb3BlKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSk7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsK
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93
X2Vycm9yKFZNKiwgUHJvdG9DYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7CiAjaWYgIUVOQUJMRShK
SVQpCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9zdGFja19jaGVja19hdF92
bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgxLDE1ICsxMjgxLDUgQEAgX2xsaW50X29w
X2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKICAgICBkaXNwYXRjaCg1KQogCiBfbGxpbnRfb3BfcHJv
ZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHk6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9z
bG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCi0gICAgZGlzcGF0Y2go
NCkKLQotX2xsaW50X29wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVj
dXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF90b19zY29wZV93
aXRoX3Byb2ZpbGUpCi0gICAgZGlzcGF0Y2goOCkKLQotX2xsaW50X29wX2dldF9mcm9tX3Njb3Bl
X3dpdGhfcHJvZmlsZToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9s
bGludF9zbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKQotICAgIGRpc3BhdGNo
KDkpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCisgICAgZGlzcGF0Y2goNikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyAr
NzksNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0R2xvCiB7CiAgICAg
U291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgU3RyaW5nKCksIENhY2hl
VHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29kZVR5cGUsIHN0cmljdG5lc3MpOwogICAg
IENvZGVDYWNoZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc291cmNlQ29kZS5hZGQoa2V5
LCBTb3VyY2VDb2RlVmFsdWUoKSk7Ci0gICAgYm9vbCBjYW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9
PSBEZWJ1Z2dlck9mZiAmJiBwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPZmY7CisgICAgYm9vbCBj
YW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9mZiAmJiBwcm9maWxlck1vZGUgPT0g
UHJvZmlsZXJPZmYgJiYgIXZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCk7CiAg
ICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBjYW5DYWNoZSkgewogICAgICAgICBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0ganNDYXN0PFVubGlua2VkQ29k
ZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAg
ICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKSArIHVubGlua2VkQ29k
ZUJsb2NrLT5maXJzdExpbmUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNs
dWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgi
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTYzNiw0ICs2
MzcsMTMgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZwogICAgIFJF
VFVSTihqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUo
KS5hc1VJbnQzMigpKS5zdHJpbmcoKSkpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBU
eXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbMl0udS5sb2NhdGlvbjsKKyAgICBKU1ZhbHVlIHZh
bCA9IE9QX0MoMSkuanNWYWx1ZSgpOworICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRU
eXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9uKTsKKyAgICBFTkQoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzMyw2ICsyMzMsNyBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1
CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0
b3JfcG5hbWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJp
bmcpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhf
aGlnaF9maWRlbGl0eSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAJKHJldmlzaW9u
IDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxv
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDQ5ICs0Myw0NyBAQCB2b2lkIEhpZ2hGaWRlbGl0
eUxvZzo6aW5pdGlhbGl6ZUhpZ2hGaWRlCiAgICAgQVNTRVJUKCFtX2xvZ1N0YXJ0UHRyKTsKICAg
ICBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUgPSA1MDAwMDsKICAgICBtX2xvZ1N0YXJ0UHRyID0gbmV3
IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07Ci0gICAgbV9uZXh0QnVmZmVyID0gbmV3
IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07Ci0gICAgbV9jdXJyZW50T2Zmc2V0ID0g
MDsKKyAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1fbG9nU3RhcnRQdHI7CisgICAgbV9sb2dF
bmRQdHIgPSBtX2xvZ1N0YXJ0UHRyICsgbV9oaWdoRmlkZWxpdHlMb2dTaXplOwogfQogCiBIaWdo
RmlkZWxpdHlMb2c6On5IaWdoRmlkZWxpdHlMb2coKQogewogICAgIGRlbGV0ZVtdIG1fbG9nU3Rh
cnRQdHI7Ci0gICAgZGVsZXRlW10gbV9uZXh0QnVmZmVyOwogfQogCiB2b2lkIEhpZ2hGaWRlbGl0
eUxvZzo6cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIGlmICgh
bV9jdXJyZW50T2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZygiUHJvY2VzcyBjYWxsZXI6JyIsIHJlYXNvbiwiJyIpOwogCiAgICAgZG91
YmxlIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xv
Z1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJlSUQsIFJlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbV9jdXJy
ZW50T2Zmc2V0KSB7CisgICAgd2hpbGUgKGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyKSB7
CiAgICAgICAgIFN0cnVjdHVyZUlEIGlkID0gZW50cnktPnN0cnVjdHVyZUlEOwogICAgICAgICBS
ZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlOyAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVu
dHJ5LT52YWx1ZTsKICAgICAgICAgaWYgKGlkKSB7CiAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBz
ZWVuU2hhcGVzLmZpbmQoaWQpOwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gc2VlblNoYXBlcy5l
bmQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlID0gSGVhcDo6aGVhcChlbnRyeS0+dmFsdWUu
YXNDZWxsKCkpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGVudHJ5LT5zdHJ1Y3R1cmVJRCktPnRv
U3RydWN0dXJlU2hhcGUoZW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBzaGFwZSA9IEhl
YXA6OmhlYXAodmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGVudHJ5LT5z
dHJ1Y3R1cmVJRCktPnRvU3RydWN0dXJlU2hhcGUodmFsdWUpOwogICAgICAgICAgICAgICAgIHNl
ZW5TaGFwZXMuc2V0KGlkLCBzaGFwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBzaGFwZSA9IGl0ZXItPnZhbHVlOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGVudHJ5LT5sb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQotICAgICAg
ICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFkZFR5cGVGb3JWYWx1ZShl
bnRyeS0+dmFsdWUsIHNoYXBlLCBpZCk7Ci0gICAgICAgIGVudHJ5LT5sb2NhdGlvbi0+bV9pbnN0
cnVjdGlvblR5cGVTZXQtPmFkZFR5cGVGb3JWYWx1ZShlbnRyeS0+dmFsdWUsIHNoYXBlLCBpZCk7
CisgICAgICAgIFJ1bnRpbWVUeXBlIHR5cGUgPSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZh
bHVlKHZhbHVlKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGVudHJ5LT5sb2Nh
dGlvbjsKKyAgICAgICAgbG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID0gdHlwZTsKKyAgICAgICAg
aWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCisgICAgICAgICAgICBsb2NhdGlvbi0+bV9n
bG9iYWxUeXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hhcGUsIGlkKTsKKyAgICAg
ICAgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24odHlw
ZSwgc2hhcGUsIGlkKTsKIAogICAgICAgICBlbnRyeSsrOwotICAgICAgICBpKys7CiAgICAgfQog
Ci0gICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1f
bG9nU3RhcnRQdHI7CiAKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBkb3VibGUgYWZ0ZXIg
PSBjdXJyZW50VGltZU1TKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
aWdoRmlkZWxpdHlMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IaWdoRmlkZWxpdHlMb2cuaAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDggKzQ2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbjsgCiAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwor
CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoTG9nRW50cnksIHN0cnVjdHVyZUlEKTsgfQorICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHZhbHVlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5
LCB2YWx1ZSk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2NhdGlvbk9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2dFbnRyeSwgbG9jYXRpb24pOyB9CiAgICAgfTsKIAor
CiAgICAgSGlnaEZpZGVsaXR5TG9nKCkKICAgICAgICAgOiBtX2xvZ1N0YXJ0UHRyKDApCiAgICAg
ewpAQCAtNTksMzcgKzY0LDI5IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVj
b3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24oSlNWYWx1ZSB2YWx1ZSwgVHlwZUxvY2F0aW9u
KiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2xvZ1N0YXJ0UHRyKTsKLSAgICAg
ICAgQVNTRVJUKG1fY3VycmVudE9mZnNldCA8IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSk7Ci0gICAg
Ci0gICAgICAgIExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHIgKyBtX2N1cnJlbnRPZmZz
ZXQ7Ci0gICAgCi0gICAgICAgIGVudHJ5LT5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICBl
bnRyeS0+dmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgZW50cnktPnN0cnVjdHVyZUlEID0gKHZhbHVl
LmlzQ2VsbCgpID8gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgOiAwKTsKKworICAgICAg
ICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAgICAgbV9j
dXJyZW50TG9nRW50cnlQdHItPnZhbHVlID0gdmFsdWU7CisgICAgICAgIG1fY3VycmVudExvZ0Vu
dHJ5UHRyLT5zdHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmVJRCgpIDogMCk7CiAgICAgCi0gICAgICAgIG1fY3VycmVudE9mZnNldCArPSAxOwot
ICAgICAgICBpZiAobV9jdXJyZW50T2Zmc2V0ID09IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSkKKyAg
ICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgKz0gMTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1f
Y3VycmVudExvZ0VudHJ5UHRyID09IG1fbG9nRW5kUHRyKSkKICAgICAgICAgICAgIHByb2Nlc3NI
aWdoRmlkZWxpdHlMb2coIkxvZyBGdWxsIik7CiAgICAgfQogCiAgICAgdm9pZCBwcm9jZXNzSGln
aEZpZGVsaXR5TG9nKFN0cmluZyk7CisgICAgTG9nRW50cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9nRW5kUHRyOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhpZ2hGaWRlbGl0eUxvZywgbV9sb2dTdGFy
dFB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIaWdoRmlkZWxpdHlMb2csIG1fY3VycmVudExvZ0VudHJ5
UHRyKTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUhpZ2hGaWRlbGl0eUxvZygp
OwogCiAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxpdHlMb2dTaXplOwotICAgIHNpemVfdCBtX2N1
cnJlbnRPZmZzZXQ7CiAgICAgTG9nRW50cnkqIG1fbG9nU3RhcnRQdHI7Ci0gICAgTG9nRW50cnkq
IG1fbmV4dEJ1ZmZlcjsKLQotICAgIEJ5dGVTcGluTG9jayBtX2xvY2s7Ci0KLSAgICBzdHJ1Y3Qg
VGhyZWFkRGF0YSB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgTG9nRW50cnkqIG1fcHJvY2Vz
c0xvZ1B0cjsKLSAgICAgICAgc2l6ZV90IG1fcHJvY2Nlc3NMb2dUb09mZnNldDsKLSAgICAgICAg
Qnl0ZVNwaW5Mb2NrZXIqIG1fbG9ja2VyOwotICAgIH07CisgICAgTG9nRW50cnkqIG1fY3VycmVu
dExvZ0VudHJ5UHRyOworICAgIExvZ0VudHJ5KiBtX2xvZ0VuZFB0cjsKIH07CiAKIH0gLy9uYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE3MjQwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDcgQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwogCiB2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNG
b3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJs
ZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3JGdW5jdGlvblJldHVybgotICAgICAgICA6IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlh
YmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3JUaGlzU3RhdGVtZW50Ci0gICAgICAgIDogVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvck5vcm1hbDsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3Ig
PSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRl
bWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA6IFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CiAKICAgICBkYXRhTG9nRigiW1N0YXJ0LCBF
bmRdOjpbJXUsICV1XVxuIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2
b3RFbmQpOwogCkBAIC00Niw5ICs0NCw3IEBAIHZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
Ojpsb2dUeXBlc0YKICAgICBlbHNlCiAgICAgICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMgTk9U
IGluIHN5c3RlbV1cbiIpOwogCi0gICAgZGF0YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2Jh
bFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gIltSZXR1cm4gU3Rh
dGVtZW50XSIKLSAgICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hG
aWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAiW1RoaXMgU3RhdGVtZW50XSIKLSAgICAgICAgOiAiW05v
cm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CisgICAgZGF0YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5t
X2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gIltSZXR1
cm4gU3RhdGVtZW50XSIgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CiAKICAgICBkYXRh
TG9nKCJcdFx0I0xvY2FsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+
c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOwogICAgIGlmIChsb2Nh
dGlvbi0+bV9nbG9iYWxUeXBlU2V0KQpAQCAtOTEsMTAgKzg3LDcgQEAgc3RhdGljIGJvb2wgZGVz
Y3JpcHRvck1hdGNoZXNUeXBlTG9jYXRpbwogICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9m
aWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiAmJiBsb2NhdGlvbi0+bV9nbG9iYWxW
YXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCkgIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JUaGlzU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGln
aEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwgJiYgbG9j
YXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQg
JiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVt
ZW50KSAgCisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ck5vcm1hbCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0eVJl
dHVyblN0YXRlbWVudCkgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODksOCArODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIHsKICAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9y
bWFsID0gMSwKLSAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCA9
IDIsCi0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuID0gMwor
ICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDIKIH07CiAK
IGNsYXNzIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNzI0MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMywxMSArMTAzLDYgQEAgU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkK
ICAgICAsIG1fY2FwdHVyZUVuZCgwKQogICAgICwgbV9mdW5jdGlvbkVudGVyZWRPbmNlKENsZWFy
V2F0Y2hwb2ludCkKIHsKLSAgICBpZiAodm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICBtX3VuaXF1ZUlETWFwID0gc3RkOjptYWtlX3VuaXF1ZTxVbmlxdWVJ
RE1hcD4oKTsKLSAgICAgICAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXAgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4oKTsKLSAgICAgICAgbV91bmlxdWVUeXBlU2V0TWFw
ID0gc3RkOjptYWtlX3VuaXF1ZTxVbmlxdWVUeXBlU2V0TWFwPigpOwotICAgIH0KIH0KIAogU3lt
Ym9sVGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQpAQCAtMTY0LDcwICsxNTksMTA0IEBAIFN5bWJv
bFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE4KICAgICAgICAgICAgIHJlc3VsdC0+
bV9zbG93QXJndW1lbnRzW2ldID0gbV9zbG93QXJndW1lbnRzW2ldOwogICAgIH0KIAotICAgIGlm
IChtX3VuaXF1ZUlETWFwICYmIHJlc3VsdC0+bV91bmlxdWVJRE1hcCkgeworICAgIGlmIChtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YSkgeworICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CiAKICAg
ICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyID0gbV91bmlxdWVJRE1hcC0+YmVnaW4oKTsK
LSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlxdWVJRE1hcC0+ZW5kKCk7CisgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5iZWdp
bigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91
bmlxdWVJRE1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV91bmlxdWVJRE1hcC0+c2V0KGl0ZXItPmtleSwg
aXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyID0gbV9yZWdpc3RlclRvVmFy
aWFibGVNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1Zh
cmlhYmxlTWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5iZWdpbigpOworICAgICAgICAgICAg
YXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVN
YXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAg
ICAgICAgICAgICByZXN1bHQtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5zZXQoaXRlci0+a2V5
LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdS
YXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuc2V0KGl0ZXItPmtleSwgaXRlci0+dmFs
dWUpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyID0gbV91
bmlxdWVUeXBlU2V0TWFwLT5iZWdpbigpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBtX3VuaXF1
ZVR5cGVTZXRNYXAtPmVuZCgpOworICAgICAgICAgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5iZWdpbigpOworICAgICAgICAgICAgYXV0
byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLmVuZCgp
OwogICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LT5tX3VuaXF1ZVR5cGVTZXRNYXAtPnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3Vu
aXF1ZVR5cGVTZXRNYXAuc2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogICAgICAgICB9CiAg
ICAgfQotCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBTeW1ib2xUYWJsZTo6
cHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYpCit7CisgICAgaWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlw
ZVByb2ZpbGluZ1JhcmVEYXRhPigpOworCisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX21hcC5iZWdp
bigpLCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBt
X3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5zZXQoaXRlci0+a2V5LCBIaWdo
RmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7CisgICAgICAgIG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5zZXQoaXRlci0+dmFsdWUuZ2V0SW5k
ZXgoKSwgaXRlci0+a2V5KTsKKyAgICB9Cit9CisKIEdsb2JhbFZhcmlhYmxlSUQgU3ltYm9sVGFi
bGU6OnVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmlu
Z0ltcGwqIGtleSwgVk0mIHZtKQogewotICAgIGF1dG8gaXRlciA9IG1fdW5pcXVlSURNYXAtPmZp
bmQoa2V5KTsKLSAgICBhdXRvIGVuZCA9IG1fdW5pcXVlSURNYXAtPmVuZCgpOwotICAgIEFTU0VS
VF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJv
ZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURh
dGEtPm1fdW5pcXVlSURNYXAuZmluZChrZXkpOworICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQor
ICAgICAgICByZXR1cm4gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKIAotICAgIEdsb2Jh
bFZhcmlhYmxlSUQmIGlkID0gaXRlci0+dmFsdWU7CisgICAgR2xvYmFsVmFyaWFibGVJRCBpZCA9
IGl0ZXItPnZhbHVlOwogICAgIGlmIChpZCA9PSBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2Vu
ZXJhdGlvbikgewogICAgICAgICBpZCA9IHZtLmdldE5leHRVbmlxdWVWYXJpYWJsZUlEKCk7Ci0g
ICAgICAgIG1fdW5pcXVlVHlwZVNldE1hcC0+c2V0KGtleSwgVHlwZVNldDo6Y3JlYXRlKCkpOyAv
L21ha2UgYSBuZXcgZ2xvYmFsIHR5cGVzZXQgZm9yIHRoZSBJRAorICAgICAgICBtX3R5cGVQcm9m
aWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5zZXQoa2V5LCBpZCk7CisgICAgICAgIG1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuc2V0KGtleSwgVHlwZVNldDo6
Y3JlYXRlKCkpOyAvLyBNYWtlIGEgbmV3IGdsb2JhbCB0eXBlc2V0IGZvciB0aGlzIGNvcnJlc3Bv
bmRpbmcgSUQuCiAgICAgfQotICAgICAgICAgCisKICAgICByZXR1cm4gaWQ7CiB9CiAKIEdsb2Jh
bFZhcmlhYmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKQogewotICAg
IGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5maW5kKHJlZ2lzdGVySW5kZXgp
OwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmVuZCgpOwotICAgIEFT
U0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBl
UHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQocmVnaXN0ZXJJbmRleCk7CisgICAg
YXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVN
YXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gSGlnaEZpZGVs
aXR5Tm9HbG9iYWxJREV4aXN0czsKKwogICAgIHJldHVybiB1bmlxdWVJREZvclZhcmlhYmxlKGxv
Y2tlciwgaXRlci0+dmFsdWUuZ2V0KCksIHZtKTsKIH0KIAogUmVmUHRyPFR5cGVTZXQ+IFN5bWJv
bFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKQogewotICAgIHVuaXF1ZUlERm9y
UmVnaXN0ZXIobG9ja2VyLCByZWdpc3RlckluZGV4LCB2bSk7IC8vZW5zdXJlIGl0J3MgY3JlYXRl
ZAotICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5maW5kKHJlZ2lzdGVy
SW5kZXgpOwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmVuZCgpOwot
ICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgdW5pcXVlSURGb3JSZWdpc3Rlcihsb2Nr
ZXIsIHJlZ2lzdGVySW5kZXgsIHZtKTsgLy8gTGF6aWx5IGNyZWF0ZSB0aGUgVHlwZVNldCBpZiBu
ZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9y
ZWdpc3RlclRvVmFyaWFibGVNYXAuZmluZChyZWdpc3RlckluZGV4KTsKKyAgICBhdXRvIGVuZCA9
IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5lbmQoKTsK
KyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgcmV0
dXJuIGdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2
bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclZh
cmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgU3RyaW5nSW1wbCoga2V5
LCBWTSYgdm0pCiB7Ci0gICAgdW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGtleSwgdm0pOwot
ICAgIHJldHVybiBtX3VuaXF1ZVR5cGVTZXRNYXAtPmZpbmQoa2V5KS0+dmFsdWU7CisgICAgUkVM
RUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgdW5pcXVlSURGb3JW
YXJpYWJsZShsb2NrZXIsIGtleSwgdm0pOyAvLyBMYXppbHkgY3JlYXRlIHRoZSBUeXBlU2V0IGlm
IG5lY2Vzc2FyeS4KKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5t
X3VuaXF1ZVR5cGVTZXRNYXAuZmluZChrZXkpOworICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBl
bmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDEyICs0
MTcsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpBZGRSZXN1bHQgYWRkKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkm
IGVudHJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5pcXVlSURNYXApIHsKLSAgICAgICAgICAg
IC8vIFVzZSBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBuZWVkIHRvIHByb2R1Y2UgYSB1bmlx
dWUgSUQuIEJlY2F1c2UgVk0gaXMgaW4gY2hhcmdlIG9mIGNyZWF0aW5nIHVuaXF1ZUlEcywgCi0g
ICAgICAgICAgICAvLyB3aGVuIHVuaXF1ZUlEKCkgaXMgY2FsbGVkLCB3ZSBjaGVjayB0aGlzIGZs
YWcgdG8gc2VlIGlmIHVuaXF1ZUlEIGNyZWF0aW9uIGlzIG5lY2Vzc2FyeS4KLSAgICAgICAgICAg
IG1fdW5pcXVlSURNYXAtPnNldChrZXksIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0
aW9uKTsgCi0gICAgICAgICAgICBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGVudHJ5Lmdl
dEluZGV4KCksIGtleSk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fbWFwLmFkZChrZXks
IGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00MzQsMTAgKzQyOCw2IEBAIHB1YmxpYzoKICAgICAK
ICAgICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmlu
Z0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgewotICAgICAg
ICBpZiAobV91bmlxdWVJRE1hcCkgewotICAgICAgICAgICAgbV91bmlxdWVJRE1hcC0+c2V0KGtl
eSwgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pOyAKLSAgICAgICAgICAgIG1f
cmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5zZXQoZW50cnkuZ2V0SW5kZXgoKSwga2V5KTsKLSAgICAg
ICAgfQogICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50cnkpOwogICAgIH0KICAgICAK
QEAgLTQ4OSw2ICs0NzksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIGNsb25l
Q2FwdHVyZWROYW1lcyhWTSYpOwogCisgICAgdm9pZCBwcmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CisKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwpAQCAtNTEzLDkgKzUwNSwxMiBAQCBwcml2YXRlOgogICAgIH5TeW1ib2xUYWJs
ZSgpOwogCiAgICAgTWFwIG1fbWFwOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJRE1hcD4g
bV91bmlxdWVJRE1hcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJUb1ZhcmlhYmxlTWFw
PiBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlVHlw
ZVNldE1hcD4gbV91bmlxdWVUeXBlU2V0TWFwOworICAgIHN0cnVjdCBUeXBlUHJvZmlsaW5nUmFy
ZURhdGEgeworICAgICAgICBVbmlxdWVJRE1hcCBtX3VuaXF1ZUlETWFwOworICAgICAgICBSZWdp
c3RlclRvVmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7CisgICAgICAgIFVuaXF1
ZVR5cGVTZXRNYXAgbV91bmlxdWVUeXBlU2V0TWFwOworICAgIH07CisgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBlUHJvZmlsaW5nUmFyZURhdGE7CiAKICAg
ICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgYm9vbCBtX3VzZXNOb25T
dHJpY3RFdmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5j
cHAJKHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxNyArNjIsMTYgQEAgUnVudGltZVR5cGUg
VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAgIGVsc2UgaWYgKHYuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0ID0gVHlwZU9iamVjdDsKICAgICBlbHNlCi0gICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIHJldCA9IFR5cGVOb3RoaW5nOwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCBU
eXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNo
YXBlPiBzaGFwZSwgU3RydWN0dXJlSUQgaWQpIAordm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3Jt
YXRpb24oUnVudGltZVR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUs
IFN0cnVjdHVyZUlEIGlkKSAKIHsKLSAgICBSdW50aW1lVHlwZSB0ID0gZ2V0UnVudGltZVR5cGVG
b3JWYWx1ZSh2KTsKLSAgICBtX3NlZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdDsKKyAgICBtX3Nl
ZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdHlwZTsKIAotICAgIGlmIChpZCAmJiBzaGFwZSAmJiAh
di5pc1N0cmluZygpICYmICF2LmlzRnVuY3Rpb24oKSkgeworICAgIGlmIChpZCAmJiBzaGFwZSAm
JiB0eXBlICE9IFR5cGVTdHJpbmcpIHsKICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlSURIaXN0
b3J5LmlzVmFsaWRLZXkoaWQpKTsKICAgICAgICAgYXV0byBpdGVyID0gbV9zdHJ1Y3R1cmVJREhp
c3RvcnkuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3RydWN0dXJlSURIaXN0b3J5
LmVuZCgpKSB7CkBAIC0yMTgsOCArMjE3LDYgQEAgU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1l
KCkgY29uc3QKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gVHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3QKIHsKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gc2VlbiA9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIGlmIChtX3NlZW5UeXBl
cyAmIFR5cGVGdW5jdGlvbikKLSAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkZ1bmN0aW9uIik7CiAg
ICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCkKICAgICAgICAgIHNlZW4tPmFkZEl0
ZW0oIlVuZGVmaW5lZCIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdWxsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkocmV2aXNpb24gMTcyNDAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIGNsYXNzIFR5cGVTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBl
U2UKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUeXBlU2V0PiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgVHlwZVNldCk7IH0KICAgICBUeXBlU2V0KCk7Ci0gICAgdm9pZCBh
ZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3Ry
dWN0dXJlSUQpOworICAgIHZvaWQgYWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOwogICAgIHN0YXRpYyBSdW50aW1l
VHlwZSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3
MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgzLDExICsyODMsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLy8gd29uJ3QgdXNlIHRoaXMuCiAgICAgbV90eXBlZEFycmF5Q29udHJv
bGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIAotICAg
IC8vIEZJWE1FOiBjb25kaXRpb25hbGx5IGFsbG9jYXRlIHRoaXMgc3R1ZmYgYmFzZWQgb24gd2hl
dGhlciBvciBub3QgdGhlIGluc3BlY3RvciBpcyBydW5uaW5nIE9SIHRoaXMgZmxhZyBpcyBlbmFi
bGVkIChub3QganVzdCBpZiB0aGUgZmxhZyBpcyBlbmFibGVkKS4KLSAgICBpZiAoT3B0aW9uczo6
cHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIG1faGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+
KCk7Ci0gICAgICAgIG1faGlnaEZpZGVsaXR5TG9nID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlk
ZWxpdHlMb2c+KCk7Ci0gICAgfQorICAgIGlmIChPcHRpb25zOjpwcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpCisgICAgICAgIGVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsK
IH0KIAogVk06On5WTSgpCkBAIC04NTgsNiArODU1LDI0IEBAIHZvaWQgVk06OnNldEVuYWJsZWRQ
cm9maWxlcihMZWdhY3lQcm9maWwKICAgICB9CiB9CiAKK3ZvaWQgVk06OmVuYWJsZUhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmcoKQoreworICAgIGlmIChpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyPigpOworICAg
IG1faGlnaEZpZGVsaXR5TG9nID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlMb2c+KCk7
Cit9CisKK3ZvaWQgVk06OmRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCkKK3sKKyAg
ICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLnJlc2V0KG51bGxwdHIpOworICAg
IG1faGlnaEZpZGVsaXR5TG9nLnJlc2V0KG51bGxwdHIpOworfQorCiB2b2lkIFZNOjpkdW1wSGln
aEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKQogewogICAgIGlmICghaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtNDk2LDYgKzQ5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBC
dWlsdGluRXhlY3V0YWJsZXMqIGJ1aWx0aW5FeGVjdXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRp
bkV4ZWN1dGFibGVzLmdldCgpOyB9CiAKICAgICAgICAgYm9vbCBpc1Byb2ZpbGluZ1R5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgpIHsgcmV0dXJuICEhbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI7IH0K
KyAgICAgICAgdm9pZCBlbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAgICAg
IHZvaWQgZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKICAgICAgICAgSGlnaEZp
ZGVsaXR5TG9nKiBoaWdoRmlkZWxpdHlMb2coKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eUxvZy5n
ZXQoKTsgfQogICAgICAgICBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIqIGhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcigpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOyB9
CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbmV4dExvY2F0aW9uKCkgeyByZXR1cm4gbV9sb2NhdGlv
bkluZm8uYWRkKCk7IH0gLy9UT0RPOiBwb3NzaWJsZSBvcHRtaXphdGlvbjogd2hlbiBjb2RlYmxv
Y2tzIGRpZSwgcmVwb3J0IHdoaWNoIGxvY2F0aW9ucyBhcmUgbm8gbG9uZ2VyIGJlaW5nIGNoYW5n
ZWQgc28gd2UgZG9uJ3Qgd2FsayBvdmVyIHRoZW0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236404</attachid>
            <date>2014-08-11 14:39:30 -0700</date>
            <delta_ts>2014-08-11 17:56:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>upload-patch.diff</filename>
            <type>text/plain</type>
            <size>91475</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNDA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNC0wOC0xMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRp
c2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZXJnZWQgb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBhbmQgb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlIGludG8KKyAgICAgICAgICBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBieSBhZGRpbmcgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBvcGNvZGUuCisgICAg
ICAgIC0gQWx0ZXJlZCBTeW1ib2xUYWJsZSB0byB1c2UgbGVzcyBtZW1vcnkgYnkgYWRkaW5nIGEg
cmFyZSBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgdHlwZSBwcm9maWxpbmcuCisgICAg
ICAgIC0gQ3JlYXRlZCBhbiBpbnRlcmZhY2UgdG8gdHVybiBvbiBhbmQgb2ZmIHR5cGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYgorICAgICAgICAgIEluc3BlY3Rvci4KKyAgICAgICAgLSBSZWZhY3Rv
cmVkIGhvdyBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIEhpZ2hGaWRlbGl0eUxvZyB0byBtYWtlIGl0
CisgICAgICAgICAgZWFzaWVyIHRvIGlubGluZSB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LgorICAgICAgICAtIEltcGxlbWVudGVkIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICBieSBpbmxpbmluZyB0aGUgcHJvY2Vz
cyBvZiB3cml0aW5nIHRvIHRoZSBsb2cgYW5kIGRvaW5nIGEgc21hbGwgYW1vdW50CisgICAgICAg
ICAgb2YgdHlwZSBpbmZlcmVuY2Ugb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2NvcGVEZXBlbmRlbnRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uOjpUeXBlTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNj
b3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5v
ZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJl
Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50
aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBl
UmVjb21waWxlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChJbnNwZWN0b3I6OnJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9X
X1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRGcm9tU2NvcGVDb21tb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpMTEludDo6cHV0VG9TY29wZUNvbW1vbik6IERlbGV0ZWQu
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSGlnaEZpZGVsaXR5TG9nLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpp
bml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9n
Ojp+SGlnaEZpZGVsaXR5TG9nKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpwcm9j
ZXNzSGlnaEZpZGVsaXR5TG9nKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5o
OgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25P
ZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1h
dGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dFbmRQ
dHIpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OmxvZ1N0YXJ0T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6Cisg
ICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBy
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3lt
Ym9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJlZE5hbWVzKToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yVmFyaWFibGUpOgorICAgICAg
ICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVlSURGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1l
L1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3Bw
OgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhbHVlKToKKyAgICAg
ICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6VHlw
ZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVzKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRk
VHlwZUZvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KEpTQzo6Vk06OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlND
OjpWTTo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKwogMjAxNC0wOC0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3MjQwMS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw3IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6IDYgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0aCIgOiA4IH0s
Ci0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUi
LCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90b19zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Nj
b3BlX3dpdGhfcHJvZmlsZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNCB9LApAQCAtMTIyLDcgKzEy
MCw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIsICJs
ZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwgImxl
bmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dp
dGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDYgfSwK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxNzI0MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9m
ZnNldCgKICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGlu
ZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9wX3B1dF9i
eV9pZDoKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKQEAgLTEyMyw3ICsxMjIsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKLSAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgog
ICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgpAQCAtMjUx
LDcgKzI0OSw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAg
ICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKICAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToK
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRo
X3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6CiAgICAgY2FzZSBvcF9lbmQ6CiAgICAg
Y2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTMyMSw3ICszMTgsNiBAQCB2b2lkIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6
CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9w
X2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMyw3ICsxNTIzLDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICAgICBvcGVyYW5kKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlX3dpdGhf
cHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwpAQCAtMTUzMiw4ICsxNTMxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZSgKICAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVyZQogICAgICAgICAgICAgaW50IG9w
ZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFuZAogICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX3Njb3BlIik7Ci0g
ICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi0g
ICAgICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMs
ICV1PCVzfCVzPiwgPHN0cnVjdHVyZT4sICVkIiwKICAgICAgICAgICAgICAgICByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpLAogICAgICAgICAgICAgICAgIG1vZGVBbmRUeXBlLm9wZXJhbmQo
KSwgcmVzb2x2ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1vZGUoKSksIHJlc29sdmVUeXBlTmFtZSht
b2RlQW5kVHlwZS50eXBlKCkpLApAQCAtMTcxNiw2ICsxNzEzLDExIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUg
PSBmYWxzZTsKICAgICAKICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5r
ZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fdm0tPmlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAg
IH0KKwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3ltYm9sVGFi
bGUtPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgqbV92
bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZUNhcHR1cmVkTmFt
ZXMoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVlOwpAQCAt
MTk0OSwxMyArMTk1MSwxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3Bl
OiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBjWzBdLnUub3Bjb2RlID09IG9wX2dldF9m
cm9tX3Njb3BlX3dpdGhfcHJvZmlsZSA/IDIgOiAxKTsKLSAgICAgICAgICAgIFZhbHVlUHJvZmls
ZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BMZW5ndGggLSBvZmZzZXRdLnUub3Bl
cmFuZF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2Zp
bGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIEFTU0VSVChwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAgICAgICAgICAgIHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAt
IG9mZnNldF0gPSBwcm9maWxlOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0
aCAtIDFdID0gcHJvZmlsZTsKIAogICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBz
Y29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCiAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5k
KTsKQEAgLTE5NjksMTYgKzE5NjksOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVy
ZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBvcF9nZXRf
ZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybWF0
IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IGdldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSBkc3Qs
IHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQsIC4uLiwg
VHlwZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0g
aSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9u
ID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwot
ICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgOF0udS5sb2NhdGlvbiA9IGxvY2F0aW9u
OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1
ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwpAQCAt
MTk5NSwzMCArMTk4OCw1MCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQo
KnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3Bl
cmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBvcF9wdXRfdG9fc2Nv
cGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlz
IGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFs
dWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9jYXRpb24q
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3Ro
IC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2NvcGVEZXBl
bmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OiB7CisgICAgICAgICAgICAvLyBUaGUgZm9y
bWF0IG9mIHRoaXMgaW5zdHJ1Y2l0b24gaXM6IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmllcj8sIHJl
c29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9w
TGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOwog
ICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEOwogICAgICAgICAg
ICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CiAgICAgICAgICAgICBib29sIHNob3Vs
ZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNz
aW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKHBj
WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBt
X3N5bWJvbFRhYmxlLmdldCgpOwotCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvZmls
ZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2FzdDxQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKwogICAgICAgICAgICAgc3dp
dGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9T
Y29wZToKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGU6
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3Rh
dGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAg
UmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgKGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVH
ZXRGcm9tU2NvcGUgPyBHZXQgOiBQdXQpLCB0eXBlKTsKKworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBhbHNvIGNvbnNp
ZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWluZSB0aGUgZ2xv
YmFsSUQKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MTg0CisgICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZh
cikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1i
b2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFy
KQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgp
LT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChz
eW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBt
dXN0IGJlIGNhbGxlZCBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHdlIG1heSBncmFiIGEgU3lt
Ym9sIFRhYmxlIHRoYXQgaGFzbid0IGJlZW4gcHJlcGFyZWQgZm9yIHByb2ZpbGluZyBmcm9tIGFu
IG91dGVyIHNjb3BlLgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZv
ckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVT
ZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQu
aW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOworCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQ6IHsKKyAgICAgICAgICAgICAgICBzeW1ib2xU
YWJsZSA9IG1fc3ltYm9sVGFibGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgZ2xv
YmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwg
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFs
VHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCB2
aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxW
YXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCBwcm9m
aWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBl
U2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihsb2NrZXIsIHByb2Zp
bGVSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQ6IApAQCAtMjAyNiwxMCArMjAzOSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0g
SGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlv
blRoaXNPYmplY3Q6IHsKLSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZp
ZGVsaXR5VGhpc1N0YXRlbWVudDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0
YXRlbWVudDogewogICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSByZXR1cm5TdGF0ZW1l
bnRUeXBlU2V0KCk7CiAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRl
bGl0eVJldHVyblN0YXRlbWVudDsKQEAgLTIwNDMsNyArMjA1Miw4IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFp
ciA9IHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgp
LT5nZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKKyAg
ICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2
bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0
VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCisgICAgICAgICAgICAgICAgbV9vd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0
LCB2bSgpKTsKICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBh
aXIuZmlyc3Q7CiAgICAgICAgICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIu
c2Vjb25kOwogCkBAIC0yNTI0LDkgKzI1MzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbi5jbGVhcigpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBvcF9n
ZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOgotICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgog
ICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgICAgICBSZXNv
bHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQogICAgICAgICAgICAgICAgICAgICBSZXNvbHZl
TW9kZUFuZFR5cGUoY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKQEAgLTM5MzUsMzUgKzM5
NDMsNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpCiB9CiAjZW5k
aWYKIAotVHlwZUxvY2F0aW9uKiBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNv
bHZlT3Agb3AsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZz
ZXQpCi17Ci0gICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Ci0gICAgYm9vbCBzaG91
bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVz
c2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOwotICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRDsKLSAgICBS
ZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKLQotICAgIC8vIEZJWE1FOiBoYW5kbGUgb3Ro
ZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBhbHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8g
d2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWluZSB0aGUgZ2xvYmFsSUQKLSAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOwotICAgIGlmIChvcC50eXBlID09IENsb3N1
cmVWYXIpIAotICAgICAgICBzeW1ib2xUYWJsZSA9IG9wLmFjdGl2YXRpb24tPnN5bWJvbFRhYmxl
KCk7Ci0gICAgZWxzZSBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIpCi0gICAgICAgIHN5bWJvbFRh
YmxlID0gbV9nbG9iYWxPYmplY3QuZ2V0KCktPnN5bWJvbFRhYmxlKCk7Ci0gICAgCi0gICAgaWYg
KHN5bWJvbFRhYmxlKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOwotICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUt
PnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICAg
ICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUo
bG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2xvYmFs
VmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7Ci0KLSAgICBzdGQ6OnBh
aXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9i
YWxWYXJpYWJsZUlELCBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsIHZtKCkpOwotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRp
b24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7Ci0gICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRp
b25QYWlyLnNlY29uZDsKLQotICAgIGlmIChzaG91bGRBbmFseXplICYgaXNOZXdMb2NhdGlvbikK
LSAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0
aW9uKGxvY2F0aW9uKTsKLQotICAgIHJldHVybiBsb2NhdGlvbjsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjAsOCArMTAyMCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAK
LSAgICBUeXBlTG9jYXRpb24qIHNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3AsIGNvbnN0
IElkZW50aWZpZXImLCBzaXplX3QpOwotICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBy
ZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKICAg
ICB2b2lkIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxv
Y2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5
cGVMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIyICszMywyMyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGVudW0gSGlnaEZpZGVsaXR5R2xvYmFsSURGbGFncyB7CiAgICAg
SGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24gPSAtMSwKICAgICBIaWdoRmlkZWxp
dHlOb0dsb2JhbElERXhpc3RzID0gLTIsCi0gICAgSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50
ID0gLTMsCi0gICAgSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCA9IC00CisgICAgSGlnaEZpZGVs
aXR5UmV0dXJuU3RhdGVtZW50ID0gLTMKIH07CiAKIHR5cGVkZWYgaW50cHRyX3QgR2xvYmFsVmFy
aWFibGVJRDsKIAogY2xhc3MgVHlwZUxvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBUeXBlTG9jYXRp
b24oKSAKLSAgICAgICAgOiBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVu
dChVSU5UX01BWCkKKyAgICBUeXBlTG9jYXRpb24oKQorICAgICAgICA6IG1fbGFzdFNlZW5UeXBl
KFR5cGVOb3RoaW5nKQorICAgICAgICAsIG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJu
U3RhdGVtZW50KFVJTlRfTUFYKQogICAgICAgICAsIG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVT
ZXQ6OmNyZWF0ZSgpKQogICAgICAgICAsIG1fZ2xvYmFsVHlwZVNldChudWxscHRyKQogICAgIHsK
ICAgICB9CiAKICAgICBHbG9iYWxWYXJpYWJsZUlEIG1fZ2xvYmFsVmFyaWFibGVJRDsKKyAgICBS
dW50aW1lVHlwZSBtX2xhc3RTZWVuVHlwZTsKICAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOwogICAg
IHVuc2lnbmVkIG1fZGl2b3RTdGFydDsKICAgICB1bnNpZ25lZCBtX2Rpdm90RW5kOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsOCArMTE1LDEzIEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgK
IAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwogCi0gICAgaWYgKG1fY29kZUJsb2Nr
LT5zeW1ib2xUYWJsZSgpKQorICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkgewor
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPnZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAgbV9jb2RlQmxvY2st
PnN5bWJvbFRhYmxlKCktPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tl
cik7CisgICAgICAgIH0KICAgICAgICAgbV9jb2RlQmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9uZUNhcHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52
bSgpKSk7CisgICAgfQogCiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCiAgICAgICAgIHJl
dHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkpOwpAQCAtMTAwNSw3ICsx
MDEwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKAogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRleCgpKSk7
CiAKICAgICBpZiAoIWRzdC0+aXNUZW1wb3JhcnkoKSAmJiBpc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKQotICAgICAgICBlbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShk
c3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOworICAgICAgICBlbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShkc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFs
SUQsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIGRzdDsKIH0KQEAgLTExMjQsMTIgKzExMjksMTgg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eQogICAgIG1fY29kZUJs
b2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25JbmZvKGluc3RydWN0aW9u
T2Zmc2V0LCBzdGFydCwgZW5kKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUs
IFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgZmxhZykKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVy
SUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNv
ZGVGbGFnIGZsYWcsIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIpCiB7CisgICAgaWYgKGZs
YWcgPT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGUgfHwgZmxhZyA9PSBQcm9maWxl
VHlwZXNCeXRlY29kZVB1dFRvU2NvcGUpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlkZW50aWZp
ZXIpOworCisgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWNpdG9uIGlzOiBvcF9wcm9m
aWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSByZWdUb1Byb2ZpbGUsIFR5cGVMb2NhdGlvbios
IGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlwZT8KICAgICBlbWl0T3Bjb2RlKG9wX3Byb2Zp
bGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cmVnaXN0ZXJUb1Byb2ZpbGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgw
KTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgVHlwZUxvY2F0aW9uIG9iamVjdCBw
b2ludGVyLgorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZmxhZyk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlkZW50aWZpZXIgPyBh
ZGRDb25zdGFudCgqaWRlbnRpZmllcikgOiAwKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cmVzb2x2ZVR5cGUoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wgYikKQEAgLTEyNzEsMjIgKzEyODIsNiBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGVXaXRoUHJv
ZmlsZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKLXsKLSAgICBtX2NvZGVCbG9j
ay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwot
Ci0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChraWxsKGRzdCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCBy
ZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHByb2ZpbGUpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBs
YWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2ludGVyLgotICAgIHJldHVybiBkc3Q7Ci19
Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3Rl
cklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFs
dWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQogewogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CkBAIC0xMzAyLDIx
ICsxMjk3LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUbwogICAg
IHJldHVybiB2YWx1ZTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRUb1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkK
LXsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVj
dGlvbnMoKS5zaXplKCkpOwotCi0gICAgZW1pdE9wY29kZShvcF9wdXRfdG9fc2NvcGVfd2l0aF9w
cm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVy
YW5kKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBUaGlzIGlzIGEg
cGxhY2Vob2xkZXIgZm9yIGEgVHlwZUxvY2F0aW9uIHBvaW50ZXIuCi0gICAgcmV0dXJuIHZhbHVl
OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3RhbmNlT2YoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZVByb3RvdHlw
ZSkKIHsgCiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDEyICsyMjMsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAotICAg
IGVudW0gUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyB7IAorICAgIGVu
dW0gUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyB7CisgICAgICAgIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwKKyAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVHZXRGcm9tU2NvcGUsCiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQs
CiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwKICAgICAg
ICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50LAotICAgICAgICBQcm9maWxl
VHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdCwKLSAgICAgICAgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCAgCisgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQKICAgICB9OwogCiAgICAgY2xhc3MgQnl0ZWNvZGVH
ZW5lcmF0b3IgewpAQCAtNDEwLDcgKzQxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZW5kRGl2b3QpOwotICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KFJlZ2lzdGVySUQqIGRzdCwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2Rl
RmxhZyk7CisgICAgICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVn
aXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSk7CkBAIC00NzcsOSArNDc4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlm
aWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVNb2RlKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlTW9k
ZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3Bl
LCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsKLSAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShSZWdpc3RlcklEKiBz
Y29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7
CiAKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CiAgICAgICAg
IHZvaWQgZW1pdExvb3BIaW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzI0MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNyw3ICsxMzcsMTQgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRC
eXRlY29kZShCeXRlYwogewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKworICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZ2Vu
ZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KHJldCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElELCBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRoaXNMZW5n
dGggPSA0OworICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBKU1RleHRQb3NpdGlvbigtMSwgcG9zaXRpb24oKS5v
ZmZzZXQgKyB0aGlzTGVuZ3RoLCAtMSkpOworICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUzLDcgKzE2MCw3IEBAIFJlZ2lzdGVySUQqIFJl
c29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3Iu
aWdub3JlZFJlc3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChnZW5l
cmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGxvY2FsLmdldCgpLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShsb2NhbC5nZXQoKSwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1Rl
eHRQb3NpdGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25J
Zk5lZWRlZChkc3QsIGxvY2FsLmdldCgpKTsKQEAgLTE2MiwxMiArMTY5LDEyIEBAIFJlZ2lzdGVy
SUQqIFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICBKU1RleHRQb3NpdGlvbiBkaXZv
dCA9IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
c2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIG1faWRlbnQpOwotICAgIFJlZ2lzdGVySUQqIHJldDsKKyAgICBSZWdpc3RlcklE
KiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGZpbmFsRGVzdCwgc2NvcGUu
Z2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2Zp
bGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKG1fcG9zaXRpb24s
IEpTVGV4dFBvc2l0aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1faWRlbnQubGVuZ3RoKCks
IC0xKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNj
b3BlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNjb3BlLmdldCgpLCBtX2lkZW50
LCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0zODcs
NyArMzk0LDcgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dAogICAg
IFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChmaW5hbERlc3Qs
IGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90
SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJldDsKQEAgLTQxMyw3ICs0MjAsNyBAQCBub25Bcmd1bWVudHNQYXRoOgogICAg
IFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7
CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwg
YmFzZSwgbV9pZGVudCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9i
YWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVs
bHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVy
biByZXQ7CkBAIC00OTcsNyArNTA0LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVO
b2RlOjplbWl0QgogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3Iu
ZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFs
dWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXQ7CkBAIC01MTgsNyArNTI1LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGU6OmVtaQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Yg
b3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KICAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZl
R2xvYmFsSUQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0OwpAQCAtNTM0LDcgKzU0MSw3IEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBt
X2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRv
ci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAg
ICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFs
dWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXQ7CkBAIC01NTMsNyArNTYwLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGU6OmVtaQogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBiYXNlLmdldCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENh
bGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
aWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVl
LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIp
OwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNz
aW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0
OwpAQCAtNTcxLDcgKzU3OCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVt
aXRCeXQKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdl
bmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9i
YWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQog
ICAgIHJldHVybiByZXQ7CkBAIC02NDUsNyArNjUyLDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQo
KSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwpAQCAtNzU5LDcgKzc2Niw3IEBAIFJlZ2lz
dGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRl
Y29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKQEAgLTgxNCwx
MSArODIxLDExIEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGlkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHNjb3BlLmdldCgpLCBpZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOworICAgIGdl
bmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBU
aHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJv
ZmlsZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RG
b3VuZCk7CisgICAgfQogCiAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwogfQpAQCAtODQyLDcg
Kzg0OSw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0QnJhY2tldChCeXQKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5n
ZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgb2xkVmFs
dWUpOwpAQCAtODY2LDcgKzg3Myw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0RG90
KEJ5dGVjb2QKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0
KCksIGlkZW50LCB2YWx1ZS5nZXQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZl
R2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBv
bGRWYWx1ZSk7CkBAIC0xMDAyLDExICsxMDA5LDExIEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6
OmVtaXRSZXNvbHZlKEJ5dGUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0
b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGlkZW50
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21T
Y29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZS5nZXQoKSwgbV9v
cGVyYXRvcik7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVu
dCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRo
cm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAm
aWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZSAKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUu
Z2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHZhbHVlLmdldCgpKTsKIH0KIApAQCAtMTAyNyw3
ICsxMDM0LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdEJyYWNrZXQoQnl0ZQogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5
LmdldCgpLCB2YWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZh
bHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKQEAgLTEw
NDksNyArMTA1Niw3IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXREb3QoQnl0ZWNvZGUK
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIGlkZW50
LCB2YWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLCBQ
cm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKQEAgLTE1MjAsMTIg
KzE1MjcsMTEgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QgogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9pZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgp
LCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5
cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSwgdGhpcyk7Ci0gICAgUmVnaXN0ZXJJ
RCogcmV0OyAKKyAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUo
c2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAg
ICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAg
ICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0
KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJlc3VsdC5nZXQoKSwgUHJv
ZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90
Rm91bmQpOworICAgIH0KICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xNTU5LDEyICsxNTY1LDEx
IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAgICAgZHN0
ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9yaWdodCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIHJldDsKKyAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1f
aWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5v
dEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICByZXQgPSBnZW5lcmF0b3Iu
ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0Lmdl
dCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRo
cm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShyZXN1bHQuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwg
Jm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZQot
ICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRl
bnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZv
dW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAgIH0gCiAgICAgcmV0dXJuIHJldDsKIH0K
IApAQCAtMTU3OSw3ICsxNTg0LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKAogICAgIFJlZ2lzdGVySUQqIGZvcndhcmRSZXN1bHQgPSAoZHN0ID09IGdlbmVyYXRv
ci5pZ25vcmVkUmVzdWx0KCkpID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihyZXN1bHQpLCByZXN1bHQpOwogICAg
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCBmb3J3YXJkUmVzdWx0
KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZv
cndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJk
UmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIp
OwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNz
aW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAg
LTE1OTgsNyArMTYwMyw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0
ZWMKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHVwZGF0ZWRWYWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC0xNjI0LDcgKzE2MjksNyBA
QCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVnaXN0ZXJJ
RCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkgPyBy
ZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgZm9yd2FyZFJlc3VsdCk7CiAgICAgaWYgKGdl
bmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQ
cm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJlc3VsdCwgUHJvZmls
ZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9E
ZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNjQ0LDcgKzE2NDks
NyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRCCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCks
IHVwZGF0ZWRWYWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJ
RCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogCkBA
IC0yMjUxLDcgKzIyNTYsNyBAQCB2b2lkIFJldHVybk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlCiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuUmVnaXN0ZXIgPSBtX3ZhbHVlID8g
Z2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV92YWx1ZSkgOiBnZW5lcmF0b3IuZW1pdExvYWQoZHN0
LCBqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1
bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdldCgpLCBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50LCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5zY29wZURlcHRoKCkpIHsK
QEAgLTI1ODIsMTcgKzI1ODcsMTMgQEAgdm9pZCBFdmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZQogdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIEpTVGV4dFBvc2l0aW9u
IHN0YXJ0KC0xLCBtX3N0YXJ0U3RhcnRPZmZzZXQsIC0xKTsgLy8gVGhpcyBkaXZvdCBpcyBhdCB0
aGUgb3BlbiBicmFjZSBvZiB0aGUgZnVuY3Rpb24uCi0gICAgICAgIEpTVGV4dFBvc2l0aW9uIGVu
ZCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0ICsgMSwgLTEpOwotICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdCk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKHN0YXJ0LCBlbmQp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBp
KyspIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgRGVzdHJ1Y3R1cmluZyBhc3NpZ25t
ZW50cyBpbnRvIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLT5hdChp
KS0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgQmluZGluZ05vZGUqIHBhcmFtZXRlciA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4obV9w
YXJhbWV0ZXJzLT5hdChpKSk7CiAgICAgICAgICAgICBSZWdpc3RlcklEIHJlZyhDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KGkpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJn
dW1lbnQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCZyZWcsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudCwgbnVsbHB0
cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhwYXJhbWV0ZXItPmRpdm90U3RhcnQoKSwgcGFyYW1ldGVyLT5kaXZvdEVu
ZCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MTQsNyArMjYxNSw3IEBAIHZvaWQgRnVuY3Rp
b25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICBpZiAoIXJldHVybk5vZGUpIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuaXNDb25zdHJ1Y3RvcigpID8gZ2VuZXJh
dG9yLnRoaXNSZWdpc3RlcigpIDogZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KCkpCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkocjAsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQpOyAvLyBE
byBub3QgZW1pdCBleHByZXNzaW9uIGluZm8gZm9yIHRoaXMgcHJvZmlsZSBiZWNhdXNlIGl0J3Mg
bm90IGluIHRoZSB1c2VyJ3Mgc291cmNlIGNvZGUuCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocjAsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOyAvLyBEbyBub3QgZW1pdCBleHByZXNzaW9u
IGluZm8gZm9yIHRoaXMgcHJvZmlsZSBiZWNhdXNlIGl0J3Mgbm90IGluIHRoZSB1c2VyJ3Mgc291
cmNlIGNvZGUuCiAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCgpID49IGxpbmVTdGFydE9mZnNl
dCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1l
LCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0UmV0dXJuKHIwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJDb21wbGV0
aW9uLmgiCisjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSGlnaEZp
ZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJQYXJz
ZXJFcnJvci5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU291
cmNlQ29kZS5oIgorI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTE5OSw4ICsyMDEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeQogICAgIHN0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwog
ICAgIHR5cGVEZXNjcmlwdGlvbnMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsK
LSAgICBpZiAoIXZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgaWYg
KCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICplcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiVGhlIFZNIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIFR5
cGUgSW5mb3JtYXRpb24uIik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBkb3VibGUg
c3RhcnQgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nl
c3NIaWdoRmlkZWxpdHlMb2coIlVzZXIgUXVlcnkiKTsKQEAgLTIzMSw2ICsyMzUsNzMgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeQogICAgICAgICBkYXRhTG9nRigi
SW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZt
c1xuIiwgZW5kIC0gc3RhcnQpOwogfQogCitjbGFzcyBUeXBlUmVjb21waWxlciA6IHB1YmxpYyBN
YXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworcHVibGljOgorICAgIGlubGluZSB2b2lkIG9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhG
dW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNlbGwpOworICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGlu
ZygpOworICAgICAgICBleGVjdXRhYmxlLT5jbGVhclVubGlua2VkQ29kZUZvclJlY29tcGlsYXRp
b25JZk5vdENvbXBpbGluZygpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyhWTSYgdm0sIGJvb2wgc2hvdWxkRW5hYmxlVHlw
ZVByb2ZpbGluZykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBtYXRjaGluZyB0aGUgdHlw
ZSBwcm9maWxpbmcgc3RhdGUgaW4gdGhlIFZNLCBkb24ndCBib3RoZXIgcmVjb21waWxpbmcuCisg
ICAgaWYgKHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcgPT0gdm0uaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm0ud2FpdEZvckNvbXBp
bGF0aW9uc1RvQ29tcGxldGUoKTsKKworICAgIGlmIChzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5n
KQorICAgICAgICB2bS5lbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAgZWxz
ZQorICAgICAgICB2bS5kaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworCisgICAg
VHlwZVJlY29tcGlsZXIgcmVjb21waWxlcjsKKyAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0
aW9uU2NvcGUodm0uaGVhcCk7CisgICAgdm0uaGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZl
Q2VsbChpdGVyYXRpb25TY29wZSwgcmVjb21waWxlcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjplbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOworICAgIGlmICh2bS5pc1Byb2ZpbGluZ1R5cGVz
V2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBKYXZhU2Ny
aXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBl
bmQKKyAgICAvLyB1cCB0aHJvd2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFj
ay4KKyAgICBpZiAodm0uZW50cnlTY29wZSkgeworICAgICAgICB2bS5lbnRyeVNjb3BlLT5zZXRF
bnRyeVNjb3BlRGlkUG9wTGlzdGVuZXIodGhpcywKKyAgICAgICAgICAgIFtdIChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KikgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKHZtLCB0cnVlKTsgCisgICAgICAgICAgICB9
CisgICAgICAgICk7CisgICAgfSBlbHNlCisgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
Rm9yVHlwZVByb2ZpbGluZyh2bSwgdHJ1ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmluZyopCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsVk0oKTsKKyAgICBpZiAoIXZtLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2bS5lbnRyeVNjb3Bl
KSB7CisgICAgICAgIHZtLmVudHJ5U2NvcGUtPnNldEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lcih0
aGlzLAorICAgICAgICAgICAgW10gKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKSAKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9m
aWxpbmcodm0sIGZhbHNlKTsgCisgICAgICAgICAgICB9CisgICAgICAgICk7CisgICAgfSBlbHNl
CisgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyh2bSwgZmFs
c2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkocmV2aXNpb24gMTcy
NDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcnVu
KEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBl
c0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0
aW9uPj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZyhFcnJvclN0cmluZyopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmluZyopIG92ZXJyaWRlOwogICAg
IAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2NyaXB0RGVidWdTZXJ2ZXIqIHNjcmlw
dERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIgPSBzY3JpcHREZWJ1Z1NlcnZlcjsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRp
bWUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1J1bnRpbWUuanNvbgkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHdvcmtpbmcgY29weSkKQEAg
LTIzOSw2ICsyMzksMTQgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGVzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlR5cGVEZXNjcmlwdGlvbiIsICJkZXNj
cmlwdGlvbiI6ICJUeXBlcyBmb3IgcmVxdWVzdGVkIHZhcmlhYmxlLiIgfSB9CiAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgZGV0YWlsZWQgaW5mb3Jt
dGF0aW9uIG9uIGdpdmVuIGZ1bmN0aW9uLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlcyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5n
IG9uIHRoZSBWTS4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEaXNhYmxlcyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIG9uIHRoZSBWTS4i
CiAgICAgICAgIH0KICAgICBdLAogICAgICJldmVudHMiOiBbCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6U1NFMkNoZWNrUwogI2luY2x1ZGUgIkFyaXR5Q2hlY2tGYWlsUmV0
dXJuVGh1bmtzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgpAQCAtMjY3LDYgKzI2OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX2luYykKICAgICAgICAgREVGSU5FX09QKG9wX3Byb2Zp
bGVfZGlkX2NhbGwpCiAgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3dpbGxfY2FsbCkKKyAg
ICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQogICAg
ICAgICBERUZJTkVfT1Aob3BfcHVzaF9uYW1lX3Njb3BlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
cHVzaF93aXRoX3Njb3BlKQogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToK
QEAgLTQ5OCw2ICs1MDAsMTAgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSQogICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwog
ICAgICAgICBicmVhazsKICAgICB9CisKKyAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYXZl
IHRoZSBtb3N0IHVwIHRvIGRhdGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIHBlcmZvcm1pbmcgdHlw
ZWNoZWNrIG9wdGltaXphdGlvbnMgZm9yIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5LgorICAgIGlmIChtX3ZtLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQor
ICAgICAgICBtX3ZtLT5oaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygi
UHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIik7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OnNob3dEaXNhc3NlbWJseSgpIHx8IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAg
ICAgbV9kaXNhc3NlbWJsZXIgPSBhZG9wdFB0cihuZXcgSklURGlzYXNzZW1ibGVyKG1fY29kZUJs
b2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3MjQwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw2
ICs1MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2luYyhJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV9kaWRfY2FsbChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX25hbWVfc2NvcGUo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1c2hfd2l0aF9zY29wZShJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDgsNiArMTMwOCwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxp
dHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Byb2Zp
bGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE3
MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMu
aCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJI
aWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNB
cnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUg
Ik1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEz
MzgsNiArMTM0MCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1
CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CisKK3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5sb2NhdGlvbjsKKyAg
ICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
CisgICAgSnVtcExpc3QganVtcFRvRW5kOworCisgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3Rp
dmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5n
IHRvIHRoZSBsb2cuCisgICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRj
aCB0aG9zZSBvZiB0aGUgNjQtYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCisgICAgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAg
IGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSkpOworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlw
ZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGp1bXBUb0Vu
ZC5hcHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
fjEpLCByZWdUMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoVmFsdWVGYWxzZSkpKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5
cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU1hY2hpbmVJbnQpIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKSk7CisgICAg
fSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1i
ZXIpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVn
VDApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIo
cmVnVDApKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZVN0cmluZykgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihTdHJpbmdUeXBlKSkpOworICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICB9CisK
KyAgICBIaWdoRmlkZWxpdHlMb2cqIGNhY2hlZEhpZ2hGaWRlbGl0eUxvZyA9IG1fdm0tPmhpZ2hG
aWRlbGl0eUxvZygpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRIaWdoRmlkZWxpdHlM
b2cpLCByZWdUMik7CisgICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEhpZ2hGaWRlbGl0eUxvZzo6Y3VycmVudExvZ0VudHJ5
T2Zmc2V0KCkpLCByZWdUMSk7CisKKyAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRo
ZSBsb2cgZW50cnkuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiks
IHJlZ1QwKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlM
b2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAvLyBTdG9yZSB0aGUgSlNW
YWx1ZSBvbiB0aGUgbG9nIGVudHJ5LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVU
b1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBIaWdo
RmlkZWxpdHlMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisKKyAgICAvLyBTdG9yZSB0
aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0
b3JlIDAsIG9uIHRoZSBsb2cgZW50cnkuCisgICAgSnVtcCBub3RDZWxsID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAg
SnVtcCBza2lwSXNDZWxsID0ganVtcCgpOworICAgIG5vdENlbGwubGluayh0aGlzKTsKKyAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpM
b2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIHNraXBJc0NlbGwubGluayh0aGlz
KTsKKworICAgIC8vIEluY3JlbWVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHNpemVvZihIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5KSksIHJlZ1Qx
KTsKKyAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBIaWdoRmlkZWxpdHlMb2c6OmN1
cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZEhpZ2hGaWRlbGl0eUxvZy0+
bG9nRW5kUHRyKCkpKTsKKyAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQg
b2YgdGhlIGxvZy4KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNsZWFySGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyTG9nKTsKKyAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKKworICAgIGp1
bXBUb0VuZC5saW5rKHRoaXMpOworfQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25GdXp6Lmgi
CiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgi
CiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCkBAIC0xOTIxLDYg
KzE5MjIsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5kZXhTdAogICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KS5zdHJp
bmcoKSk7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25DbGVhckhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZXhlYy0+dm0oKS5oaWdo
RmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiTG9nIEZ1bGwsIGNhbGxlZCBm
cm9tIGluc2lkZSBiYXNlbGluZSBKSVQiKTsKK30KKwogfSAvLyBleHRlcm4gIkMiCiAKIC8vIE5v
dGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxh
Y2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCw4IEBAIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmkKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBp
bnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4
ZWNTdGF0ZSosIGludDMyX3QpOwogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2xlYXJI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsZXJMb2coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCiB9
IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlu
a0ZvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDE1ICs1NDAsNiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X3JlZ2V4CiAgICAgTExJTlRfUkVUVVJO
KFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJl
Z0V4cFN0cnVjdHVyZSgpLCByZWdFeHApKTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQotewotICAgIExMSU5UX0JF
R0lOKCk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzJdLnUubG9jYXRpb247Ci0g
ICAgSlNWYWx1ZSB2YWwgPSBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKTsKLSAgICB2bS5oaWdoRmlk
ZWxpdHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsLCBsb2NhdGlv
bik7Ci0gICAgTExJTlRfRU5EX0lNUEwoKTsKLX0KLQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2NoZWNrX2hhc19pbnN0YW5jZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTM3
NSw4ICsxMzY2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3MK
ICAgICBMTElOVF9SRVRVUk4oSlNTY29wZTo6cmVzb2x2ZShleGVjLCBleGVjLT5zY29wZSgpLCBp
ZGVudCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBnZXRGcm9tU2NvcGVDb21tb24oRXhlY1N0YXRl
KiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIFZNJiB2bSkKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9nZXRfZnJvbV9zY29wZSkKIHsKKyAgICBMTElOVF9CRUdJTigpOworCiAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1sz
XS51Lm9wZXJhbmQpOwogICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KExM
SU5UX09QKDIpLmpzVmFsdWUoKSk7CiAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBl
KHBjWzRdLnUub3BlcmFuZCk7CkBAIC0xMzg0LDggKzEzNzcsOCBAQCBzdGF0aWMgSlNWYWx1ZSBn
ZXRGcm9tU2NvcGVDb21tb24oRXhlY1N0CiAgICAgUHJvcGVydHlTbG90IHNsb3Qoc2NvcGUpOwog
ICAgIGlmICghc2NvcGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKICAg
ICAgICAgaWYgKG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQpCi0gICAgICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRlZmlu
ZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAgICAgTExJTlRfUkVUVVJOKGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpKTsKKyAgICAg
ICAgTExJTlRfUkVUVVJOKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIC8vIENvdmVycyBp
bXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3Qg
ZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1l
LgpAQCAtMTQwMiwyNyArMTM5NSwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRGcm9tU2NvcGVDb21t
b24oRXhlY1N0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShl
eGVjLCBpZGVudCk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZnJv
bV9zY29wZSkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRG
cm9tU2NvcGVDb21tb24oZXhlYywgcGMsIHZtKTsKLSAgICBMTElOVF9SRVRVUk4odmFsdWUpOwor
ICAgIExMSU5UX1JFVFVSTihzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KSk7CiB9CiAKLUxMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpCitM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKQogewogICAgIExMSU5U
X0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGdldEZyb21TY29wZUNvbW1vbihleGVjLCBw
Yywgdm0pOwotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBwY1s4XS51LmxvY2F0aW9uOwot
ICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlv
bih2YWx1ZSwgbG9jYXRpb24pOwotICAgIExMSU5UX1JFVFVSTih2YWx1ZSk7Ci19CiAKLXN0YXRp
YyBKU09iamVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9u
KiBwYykKLXsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwog
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBjWzJd
LnUub3BlcmFuZCk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJ
TlRfT1AoMSkuanNWYWx1ZSgpKTsKQEAgLTE0MzAsMzUgKzE0MDksMTMgQEAgc3RhdGljIEpTT2Jq
ZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdAogICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2Rl
QW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQpOwogCiAgICAgaWYg
KG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9w
ZXJ0eShleGVjLCBpZGVudCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVVbmRlZmluZWRWYXJpYWJs
ZUVycm9yKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVW5kZWZpbmVk
VmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
c2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJs
ZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgQ29t
bW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBw
Yywgc2NvcGUsIG1vZGVBbmRUeXBlLCBzbG90KTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKQotewotICAgIExM
SU5UX0JFR0lOKCk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHV0VG9TY29wZUNvbW1vbihleGVj
LCBwYyk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBMTElOVF9USFJPVyhlcnJvcik7Ci0gICAg
TExJTlRfRU5EKCk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9f
c2NvcGVfd2l0aF9wcm9maWxlKQotewotICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVj
dGlvbiBpcyB0aGUgc2FtZSBhcyBwdXRfdG9fc2NvcGUgd2l0aCBhIFR5cGVMb2NhdGlvbiBhcHBl
bmRlZDogcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBzY29wZSwgaWQsIHZhbHVlLCBSZXNvbHZl
TW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZCwgVHlwZUxvY2F0aW9uKgotICAgIExMSU5U
X0JFR0lOKCk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHV0VG9TY29wZUNvbW1vbihleGVjLCBw
Yyk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBMTElOVF9USFJPVyhlcnJvcik7Ci0gICAgVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzddLnUubG9jYXRpb247Ci0gICAgSlNWYWx1ZSB2YWwg
PSBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKTsKLSAgICB2bS5oaWdoRmlkZWxpdHlMb2coKS0+cmVj
b3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsLCBsb2NhdGlvbik7CiAgICAgTExJTlRf
RU5EKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEwICsxMTgsNyBAQCBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3ByCiBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2hhbmRsZV9leGNlcHRpb24pOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpOwotTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpOwotTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKTsK
LUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRo
X2hpZ2hfZmlkZWxpdHkpOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhy
b3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5B
TDsKICNpZiAhRU5BQkxFKEpJVCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50
X3N0YWNrX2NoZWNrX2F0X3ZtX2VudHJ5KFZNKiwgUmVnaXN0ZXIqKSBXVEZfSU5URVJOQUw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyODEsMTUgKzEy
ODEsNSBAQCBfbGxpbnRfb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGRpc3BhdGNoKDUp
CiAKIF9sbGludF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eToKLSAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0
eSkKLSAgICBkaXNwYXRjaCg0KQotCi1fbGxpbnRfb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmls
ZToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3Bh
dGhfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSkKLSAgICBkaXNwYXRjaCg4KQotCi1fbGxpbnRf
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2Zp
bGUpCi0gICAgZGlzcGF0Y2goOSkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9wcm9maWxl
X3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKKyAgICBkaXNwYXRjaCg2KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNzI0MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hl
OjpnZXRHbG8KIHsKICAgICBTb3VyY2VDb2RlS2V5IGtleSA9IFNvdXJjZUNvZGVLZXkoc291cmNl
LCBTdHJpbmcoKSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+Ojpjb2RlVHlwZSwg
c3RyaWN0bmVzcyk7CiAgICAgQ29kZUNhY2hlTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9z
b3VyY2VDb2RlLmFkZChrZXksIFNvdXJjZUNvZGVWYWx1ZSgpKTsKLSAgICBib29sIGNhbkNhY2hl
ID0gZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT2ZmICYmIHByb2ZpbGVyTW9kZSA9PSBQcm9maWxl
ck9mZjsKKyAgICBib29sIGNhbkNhY2hlID0gZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT2ZmICYm
IHByb2ZpbGVyTW9kZSA9PSBQcm9maWxlck9mZiAmJiAhdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGNhbkNhY2hl
KSB7CiAgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBq
c0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5j
ZWxsLmdldCgpKTsKICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gc291cmNlLmZpcnN0TGlu
ZSgpICsgdW5saW5rZWRDb2RlQmxvY2stPmZpcnN0TGluZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAx
NzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5k
bGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgogI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhvc3RD
YWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJ
VC5oIgpAQCAtNjM2LDQgKzYzNywxMyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9faW5k
ZXhfc3RyaW5nCiAgICAgUkVUVVJOKGpzU3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgT1AoMikuanNWYWx1ZSgpLmFzVUludDMyKCkpLnN0cmluZygpKSk7CiB9CiAKK1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKK3sKKyAg
ICBCRUdJTigpOworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBwY1syXS51LmxvY2F0aW9u
OworICAgIEpTVmFsdWUgdmFsID0gT1BfQygxKS5qc1ZhbHVlKCk7CisgICAgdm0uaGlnaEZpZGVs
aXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbCwgbG9jYXRpb24p
OworICAgIEVORCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzI0
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMzLDYgKzIzMyw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfZ2V0X3N0cnUKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2dl
bmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX3RvX2luZGV4X3N0cmluZyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5
TG9nLmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGlnaEZpZGVsaXR5TG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNDkgKzQzLDQ3IEBA
IHZvaWQgSGlnaEZpZGVsaXR5TG9nOjppbml0aWFsaXplSGlnaEZpZGUKICAgICBBU1NFUlQoIW1f
bG9nU3RhcnRQdHIpOwogICAgIG1faGlnaEZpZGVsaXR5TG9nU2l6ZSA9IDUwMDAwOwogICAgIG1f
bG9nU3RhcnRQdHIgPSBuZXcgTG9nRW50cnlbbV9oaWdoRmlkZWxpdHlMb2dTaXplXTsKLSAgICBt
X25leHRCdWZmZXIgPSBuZXcgTG9nRW50cnlbbV9oaWdoRmlkZWxpdHlMb2dTaXplXTsKLSAgICBt
X2N1cnJlbnRPZmZzZXQgPSAwOworICAgIG1fY3VycmVudExvZ0VudHJ5UHRyID0gbV9sb2dTdGFy
dFB0cjsKKyAgICBtX2xvZ0VuZFB0ciA9IG1fbG9nU3RhcnRQdHIgKyBtX2hpZ2hGaWRlbGl0eUxv
Z1NpemU7CiB9CiAKIEhpZ2hGaWRlbGl0eUxvZzo6fkhpZ2hGaWRlbGl0eUxvZygpCiB7CiAgICAg
ZGVsZXRlW10gbV9sb2dTdGFydFB0cjsKLSAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9CiAK
IHZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyByZWFz
b24pCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJQcm9jZXNzIGNhbGxlcjonIiwgcmVhc29u
LCInIik7CiAKICAgICBkb3VibGUgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOwogICAgIExvZ0Vu
dHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7CiAgICAgSGFzaE1hcDxTdHJ1Y3R1cmVJRCwgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPj4gc2VlblNoYXBlczsKLSAgICBzaXplX3QgaSA9IDA7Ci0gICAg
d2hpbGUgKGkgPCBtX2N1cnJlbnRPZmZzZXQpIHsKKyAgICB3aGlsZSAoZW50cnkgIT0gbV9jdXJy
ZW50TG9nRW50cnlQdHIpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+c3RydWN0
dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAorICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZW50cnktPnZhbHVlOwogICAgICAgICBpZiAoaWQpIHsKICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChpZCk7CiAgICAgICAgICAgICBpZiAoaXRl
ciA9PSBzZWVuU2hhcGVzLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpo
ZWFwKGVudHJ5LT52YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZW50cnkt
PnN0cnVjdHVyZUlEKS0+dG9TdHJ1Y3R1cmVTaGFwZShlbnRyeS0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHNoYXBlID0gSGVhcDo6aGVhcCh2YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQoZW50cnktPnN0cnVjdHVyZUlEKS0+dG9TdHJ1Y3R1cmVTaGFwZSh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgc2VlblNoYXBlcy5zZXQoaWQsIHNoYXBlKTsKLSAgICAgICAgICAgIH0g
ZWxzZSAKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHNoYXBlID0gaXRlci0+
dmFsdWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZW50cnktPmxvY2F0aW9uLT5tX2dsb2Jh
bFR5cGVTZXQpCi0gICAgICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+
YWRkVHlwZUZvclZhbHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUsIGlkKTsKLSAgICAgICAgZW50cnkt
PmxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWRkVHlwZUZvclZhbHVlKGVudHJ5LT52
YWx1ZSwgc2hhcGUsIGlkKTsKKyAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IFR5cGVTZXQ6Omdl
dFJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpOworICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gZW50cnktPmxvY2F0aW9uOworICAgICAgICBsb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUg
PSB0eXBlOworICAgICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKKyAgICAgICAg
ICAgIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFkZFR5cGVJbmZvcm1hdGlvbih0eXBlLCBz
aGFwZSwgaWQpOworICAgICAgICBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFkZFR5
cGVJbmZvcm1hdGlvbih0eXBlLCBzaGFwZSwgaWQpOwogCiAgICAgICAgIGVudHJ5Kys7Ci0gICAg
ICAgIGkrKzsKICAgICB9CiAKLSAgICBtX2N1cnJlbnRPZmZzZXQgPSAwOworICAgIG1fY3VycmVu
dExvZ0VudHJ5UHRyID0gbV9sb2dTdGFydFB0cjsKIAogICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oCShyZXZpc2lvbiAxNzI0MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTMgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlIHZh
bHVlOwogICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uOyAKICAgICAgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQ7CisKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2dFbnRyeSwgc3RydWN0dXJlSUQpOyB9
CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmFsdWVPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoTG9nRW50cnksIHZhbHVlKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxv
Y2F0aW9uT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCBsb2NhdGlv
bik7IH0KICAgICB9OwogCisKICAgICBIaWdoRmlkZWxpdHlMb2coKQogICAgICAgICA6IG1fbG9n
U3RhcnRQdHIoMCkKICAgICB7CkBAIC01OSwzNyArNjQsMjkgQEAgcHVibGljOgogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCByZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbihKU1ZhbHVlIHZh
bHVlLCBUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbG9n
U3RhcnRQdHIpOwotICAgICAgICBBU1NFUlQobV9jdXJyZW50T2Zmc2V0IDwgbV9oaWdoRmlkZWxp
dHlMb2dTaXplKTsKLSAgICAKLSAgICAgICAgTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0
ciArIG1fY3VycmVudE9mZnNldDsKLSAgICAKLSAgICAgICAgZW50cnktPmxvY2F0aW9uID0gbG9j
YXRpb247Ci0gICAgICAgIGVudHJ5LT52YWx1ZSA9IHZhbHVlOwotICAgICAgICBlbnRyeS0+c3Ry
dWN0dXJlSUQgPSAodmFsdWUuaXNDZWxsKCkgPyB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQo
KSA6IDApOworCisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT5sb2NhdGlvbiA9IGxvY2F0
aW9uOworICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+dmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgbV9jdXJyZW50TG9nRW50cnlQdHItPnN0cnVjdHVyZUlEID0gKHZhbHVlLmlzQ2VsbCgpID8g
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgOiAwKTsKICAgICAKLSAgICAgICAgbV9jdXJy
ZW50T2Zmc2V0ICs9IDE7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRPZmZzZXQgPT0gbV9oaWdoRmlk
ZWxpdHlMb2dTaXplKQorICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciArPSAxOworICAgICAg
ICBpZiAoVU5MSUtFTFkobV9jdXJyZW50TG9nRW50cnlQdHIgPT0gbV9sb2dFbmRQdHIpKQogICAg
ICAgICAgICAgcHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiTG9nIEZ1bGwiKTsKICAgICB9CiAKICAg
ICB2b2lkIHByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3RyaW5nKTsKKyAgICBMb2dFbnRyeSogbG9n
RW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KKworICAgIHN0YXRpYyBwdHJk
aWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGlnaEZpZGVs
aXR5TG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudExv
Z0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhpZ2hGaWRlbGl0eUxvZywg
bV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
SGlnaEZpZGVsaXR5TG9nKCk7CiAKICAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eUxvZ1NpemU7
Ci0gICAgc2l6ZV90IG1fY3VycmVudE9mZnNldDsKICAgICBMb2dFbnRyeSogbV9sb2dTdGFydFB0
cjsKLSAgICBMb2dFbnRyeSogbV9uZXh0QnVmZmVyOwotCi0gICAgQnl0ZVNwaW5Mb2NrIG1fbG9j
azsKLQotICAgIHN0cnVjdCBUaHJlYWREYXRhIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICBM
b2dFbnRyeSogbV9wcm9jZXNzTG9nUHRyOwotICAgICAgICBzaXplX3QgbV9wcm9jY2Vzc0xvZ1Rv
T2Zmc2V0OwotICAgICAgICBCeXRlU3BpbkxvY2tlciogbV9sb2NrZXI7Ci0gICAgfTsKKyAgICBM
b2dFbnRyeSogbV9jdXJyZW50TG9nRW50cnlQdHI7CisgICAgTG9nRW50cnkqIG1fbG9nRW5kUHRy
OwogfTsKIAogfSAvL25hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAkocmV2
aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNyBAQCBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHZvaWQgSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQog
ewotICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGxvY2F0aW9u
LT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuCi0gICAgICAgIDogbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQKLSAgICAgICAgOiBUeXBlUHJv
ZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsOworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3IgZGVzY3JpcHRvciA9IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZp
ZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0
aW9uUmV0dXJuIDogVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDsKIAogICAgIGRh
dGFMb2dGKCJbU3RhcnQsIEVuZF06OlsldSwgJXVdXG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0
LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7CiAKQEAgLTQ2LDkgKzQ0LDcgQEAgdm9pZCBIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI6OmxvZ1R5cGVzRgogICAgIGVsc2UKICAgICAgICAgZGF0YUxvZygi
XHRcdFtFbnRyeSBJUyBOT1QgaW4gc3lzdGVtXVxuIik7CiAKLSAgICBkYXRhTG9nKCJcdFx0Iiwg
bG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1l
bnQgPyAiW1JldHVybiBTdGF0ZW1lbnRdIgotICAgICAgICA6IGxvY2F0aW9uLT5tX2dsb2JhbFZh
cmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCA/ICJbVGhpcyBTdGF0ZW1lbnRd
IgotICAgICAgICA6ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJc
dFx0IiwgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5T
dGF0ZW1lbnQgPyAiW1JldHVybiBTdGF0ZW1lbnRdIiA6ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAi
XG4iKTsKIAogICAgIGRhdGFMb2coIlx0XHQjTG9jYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5z
dHJ1Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxu
Iik7CiAgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCkBAIC05MSwxMCArODcsNyBA
QCBzdGF0aWMgYm9vbCBkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvCiAgICAgaWYgKGRlc2Ny
aXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuICYmIGxv
Y2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50
KSAgCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVBy
b2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZ2xvYmFs
VmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50KSAgCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvck5vcm1hbCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0
eVJldHVyblN0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hG
aWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQg
IT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50KSAgCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3MjQw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw4ICs4OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBlbnVtIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgewogICAgIFR5cGVQcm9maWxlclNl
YXJjaERlc2NyaXB0b3JOb3JtYWwgPSAxLAotICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JUaGlzU3RhdGVtZW50ID0gMiwKLSAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVu
Y3Rpb25SZXR1cm4gPSAzCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9u
UmV0dXJuID0gMgogfTsKIAogY2xhc3MgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlz
aW9uIDE3MjQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDExICsxMDMsNiBAQCBTeW1ib2xUYWJsZTo6U3lt
Ym9sVGFibGUoVk0mIHZtKQogICAgICwgbV9jYXB0dXJlRW5kKDApCiAgICAgLCBtX2Z1bmN0aW9u
RW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewotICAgIGlmICh2bS5pc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIG1fdW5pcXVlSURNYXAgPSBzdGQ6Om1h
a2VfdW5pcXVlPFVuaXF1ZUlETWFwPigpOwotICAgICAgICBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJUb1ZhcmlhYmxlTWFwPigpOwotICAgICAgICBt
X3VuaXF1ZVR5cGVTZXRNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFVuaXF1ZVR5cGVTZXRNYXA+KCk7
Ci0gICAgfQogfQogCiBTeW1ib2xUYWJsZTo6flN5bWJvbFRhYmxlKCkgeyB9CkBAIC0xNjQsNzAg
KzE1OSwxMDQgQEAgU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1cmVkTgogICAg
ICAgICAgICAgcmVzdWx0LT5tX3Nsb3dBcmd1bWVudHNbaV0gPSBtX3Nsb3dBcmd1bWVudHNbaV07
CiAgICAgfQogCi0gICAgaWYgKG1fdW5pcXVlSURNYXAgJiYgcmVzdWx0LT5tX3VuaXF1ZUlETWFw
KSB7CisgICAgaWYgKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKSB7CisgICAgICAgIHJlc3VsdC0+
bV90eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdS
YXJlRGF0YT4oKTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3VuaXF1
ZUlETWFwLT5iZWdpbigpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBtX3VuaXF1ZUlETWFwLT5l
bmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5t
X3VuaXF1ZUlETWFwLmJlZ2luKCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5tX3VuaXF1ZUlETWFw
LT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5t
X3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5zZXQoaXRlci0+a2V5LCBpdGVy
LT52YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXIg
PSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+YmVnaW4oKTsKLSAgICAgICAgICAgIGF1dG8gZW5k
ID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmVuZCgpOworICAgICAgICAgICAgYXV0byBpdGVy
ID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmJlZ2lu
KCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3Jl
Z2lzdGVyVG9WYXJpYWJsZU1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV9yZWdpc3RlclRvVmFyaWFibGVN
YXAtPnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQt
Pm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5zZXQoaXRl
ci0+a2V5LCBpdGVyLT52YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBtX3VuaXF1ZVR5cGVTZXRNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBh
dXRvIGVuZCA9IG1fdW5pcXVlVHlwZVNldE1hcC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0
ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLmJlZ2luKCk7
CisgICAgICAgICAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1
ZVR5cGVTZXRNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgICAgICAgICByZXN1bHQtPm1fdW5pcXVlVHlwZVNldE1hcC0+c2V0KGl0ZXIt
PmtleSwgaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1
ZSk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2
b2lkIFN5bWJvbFRhYmxlOjpwcmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJikKK3sKKyAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFyZURh
dGEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxUeXBlUHJvZmlsaW5nUmFyZURhdGE+KCk7CisKKyAgICBmb3IgKGF1dG8g
aXRlciA9IG1fbWFwLmJlZ2luKCksIGVuZCA9IG1fbWFwLmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNl
dChpdGVyLT5rZXksIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKTsKKyAgICAg
ICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLnNldChp
dGVyLT52YWx1ZS5nZXRJbmRleCgpLCBpdGVyLT5rZXkpOworICAgIH0KK30KKwogR2xvYmFsVmFy
aWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURGb3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBWTSYgdm0pCiB7Ci0gICAgYXV0byBpdGVyID0g
bV91bmlxdWVJRE1hcC0+ZmluZChrZXkpOwotICAgIGF1dG8gZW5kID0gbV91bmlxdWVJRE1hcC0+
ZW5kKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5kKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSk7CisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5maW5kKGtleSk7CisgICAgYXV0byBl
bmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5lbmQoKTsKKyAgICBp
ZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybiBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhp
c3RzOwogCi0gICAgR2xvYmFsVmFyaWFibGVJRCYgaWQgPSBpdGVyLT52YWx1ZTsKKyAgICBHbG9i
YWxWYXJpYWJsZUlEIGlkID0gaXRlci0+dmFsdWU7CiAgICAgaWYgKGlkID09IEhpZ2hGaWRlbGl0
eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKSB7CiAgICAgICAgIGlkID0gdm0uZ2V0TmV4dFVuaXF1
ZVZhcmlhYmxlSUQoKTsKLSAgICAgICAgbV91bmlxdWVUeXBlU2V0TWFwLT5zZXQoa2V5LCBUeXBl
U2V0OjpjcmVhdGUoKSk7IC8vbWFrZSBhIG5ldyBnbG9iYWwgdHlwZXNldCBmb3IgdGhlIElECisg
ICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNldChrZXksIGlk
KTsKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5z
ZXQoa2V5LCBUeXBlU2V0OjpjcmVhdGUoKSk7IC8vIE1ha2UgYSBuZXcgZ2xvYmFsIHR5cGVzZXQg
Zm9yIHRoaXMgY29ycmVzcG9uZGluZyBJRC4KICAgICB9Ci0gICAgICAgICAKKwogICAgIHJldHVy
biBpZDsKIH0KIAogR2xvYmFsVmFyaWFibGVJRCBTeW1ib2xUYWJsZTo6dW5pcXVlSURGb3JSZWdp
c3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4
LCBWTSYgdm0pCiB7Ci0gICAgYXV0byBpdGVyID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmZp
bmQocmVnaXN0ZXJJbmRleCk7Ci0gICAgYXV0byBlbmQgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cC0+ZW5kKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5kKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSk7CisKKyAgICBhdXRvIGl0ZXIgPSBt
X3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZmluZChyZWdp
c3RlckluZGV4KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3Jl
Z2lzdGVyVG9WYXJpYWJsZU1hcC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAg
IHJldHVybiBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOworCiAgICAgcmV0dXJuIHVuaXF1
ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpdGVyLT52YWx1ZS5nZXQoKSwgdm0pOwogfQogCiBSZWZQ
dHI8VHlwZVNldD4gU3ltYm9sVGFibGU6Omdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pCiB7
Ci0gICAgdW5pcXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHJlZ2lzdGVySW5kZXgsIHZtKTsgLy9l
bnN1cmUgaXQncyBjcmVhdGVkCi0gICAgYXV0byBpdGVyID0gbV9yZWdpc3RlclRvVmFyaWFibGVN
YXAtPmZpbmQocmVnaXN0ZXJJbmRleCk7Ci0gICAgYXV0byBlbmQgPSBtX3JlZ2lzdGVyVG9WYXJp
YWJsZU1hcC0+ZW5kKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChlbmQsIGl0ZXIgIT0gZW5kKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSk7CisKKyAgICB1bmlxdWVJ
REZvclJlZ2lzdGVyKGxvY2tlciwgcmVnaXN0ZXJJbmRleCwgdm0pOyAvLyBMYXppbHkgY3JlYXRl
IHRoZSBUeXBlU2V0IGlmIG5lY2Vzc2FyeS4KKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5maW5kKHJlZ2lzdGVySW5kZXgp
OworICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1Zh
cmlhYmxlTWFwLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKICAgICByZXR1cm4gZ2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaXRl
ci0+dmFsdWUuZ2V0KCksIHZtKTsKIH0KIAogUmVmUHRyPFR5cGVTZXQ+IFN5bWJvbFRhYmxlOjpn
bG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
LCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKIHsKLSAgICB1bmlxdWVJREZvclZhcmlhYmxlKGxv
Y2tlciwga2V5LCB2bSk7Ci0gICAgcmV0dXJuIG1fdW5pcXVlVHlwZVNldE1hcC0+ZmluZChrZXkp
LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSk7CisK
KyAgICB1bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwga2V5LCB2bSk7IC8vIExhemlseSBjcmVh
dGUgdGhlIFR5cGVTZXQgaWYgbmVjZXNzYXJ5LgorCisgICAgYXV0byBpdGVyID0gbV90eXBlUHJv
ZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5maW5kKGtleSk7CisgICAgYXV0byBl
bmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLmVuZCgpOwor
ICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gaXRlci0+dmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNzI0MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MTcsMTIgKzQxNyw2IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFkZFJlc3Vs
dCBhZGQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3Qg
U3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCiAgICAgewotICAgICAgICBpZiAobV91bmlxdWVJRE1h
cCkgewotICAgICAgICAgICAgLy8gVXNlIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHdlIG5lZWQg
dG8gcHJvZHVjZSBhIHVuaXF1ZSBJRC4gQmVjYXVzZSBWTSBpcyBpbiBjaGFyZ2Ugb2YgY3JlYXRp
bmcgdW5pcXVlSURzLCAKLSAgICAgICAgICAgIC8vIHdoZW4gdW5pcXVlSUQoKSBpcyBjYWxsZWQs
IHdlIGNoZWNrIHRoaXMgZmxhZyB0byBzZWUgaWYgdW5pcXVlSUQgY3JlYXRpb24gaXMgbmVjZXNz
YXJ5LgotICAgICAgICAgICAgbV91bmlxdWVJRE1hcC0+c2V0KGtleSwgSGlnaEZpZGVsaXR5TmVl
ZHNVbmlxdWVJREdlbmVyYXRpb24pOyAKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJUb1ZhcmlhYmxl
TWFwLT5zZXQoZW50cnkuZ2V0SW5kZXgoKSwga2V5KTsKLSAgICAgICAgfQogICAgICAgICByZXR1
cm4gbV9tYXAuYWRkKGtleSwgZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQzNCwxMCArNDI4LDYg
QEAgcHVibGljOgogICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IHNldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSkKICAgICB7Ci0gICAgICAgIGlmIChtX3VuaXF1ZUlETWFwKSB7Ci0gICAgICAgICAgICBtX3Vu
aXF1ZUlETWFwLT5zZXQoa2V5LCBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7
IAotICAgICAgICAgICAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPnNldChlbnRyeS5nZXRJbmRl
eCgpLCBrZXkpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX21hcC5zZXQoa2V5LCBlbnRy
eSk7CiAgICAgfQogICAgIApAQCAtNDg5LDYgKzQ3OSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBT
eW1ib2xUYWJsZSogY2xvbmVDYXB0dXJlZE5hbWVzKFZNJik7CiAKKyAgICB2b2lkIHByZXBhcmVG
b3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsK
KwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC01MTMsOSArNTA1LDEyIEBAIHByaXZhdGU6
CiAgICAgflN5bWJvbFRhYmxlKCk7CiAKICAgICBNYXAgbV9tYXA7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFVuaXF1ZUlETWFwPiBtX3VuaXF1ZUlETWFwOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdp
c3RlclRvVmFyaWFibGVNYXA+IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxVbmlxdWVUeXBlU2V0TWFwPiBtX3VuaXF1ZVR5cGVTZXRNYXA7CisgICAgc3RydWN0
IFR5cGVQcm9maWxpbmdSYXJlRGF0YSB7CisgICAgICAgIFVuaXF1ZUlETWFwIG1fdW5pcXVlSURN
YXA7CisgICAgICAgIFJlZ2lzdGVyVG9WYXJpYWJsZU1hcCBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cDsKKyAgICAgICAgVW5pcXVlVHlwZVNldE1hcCBtX3VuaXF1ZVR5cGVTZXRNYXA7CisgICAgfTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPiBtX3R5cGVQcm9maWxp
bmdSYXJlRGF0YTsKIAogICAgIGludCBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAg
ICBib29sIG1fdXNlc05vblN0cmljdEV2YWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE3ICs2Miwx
NiBAQCBSdW50aW1lVHlwZSBUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAgZWxzZSBp
ZiAodi5pc09iamVjdCgpKQogICAgICAgICByZXQgPSBUeXBlT2JqZWN0OwogICAgIGVsc2UKLSAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0ID0gVHlwZU5vdGhpbmc7CiAKICAgICByZXR1cm4g
cmV0OwogfQogCi12b2lkIFR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZShKU1ZhbHVlIHYsIFBhc3NS
ZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkgCit2b2lkIFR5cGVT
ZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZVNoYXBlPiBzaGFwZSwgU3RydWN0dXJlSUQgaWQpIAogewotICAgIFJ1bnRpbWVUeXBlIHQg
PSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKHYpOwotICAgIG1fc2VlblR5cGVzID0gbV9zZWVuVHlw
ZXMgfCB0OworICAgIG1fc2VlblR5cGVzID0gbV9zZWVuVHlwZXMgfCB0eXBlOwogCi0gICAgaWYg
KGlkICYmIHNoYXBlICYmICF2LmlzU3RyaW5nKCkgJiYgIXYuaXNGdW5jdGlvbigpKSB7CisgICAg
aWYgKGlkICYmIHNoYXBlICYmIHR5cGUgIT0gVHlwZVN0cmluZykgewogICAgICAgICBBU1NFUlQo
bV9zdHJ1Y3R1cmVJREhpc3RvcnkuaXNWYWxpZEtleShpZCkpOwogICAgICAgICBhdXRvIGl0ZXIg
PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9z
dHJ1Y3R1cmVJREhpc3RvcnkuZW5kKCkpIHsKQEAgLTIxOCw4ICsyMTcsNiBAQCBTdHJpbmcgVHlw
ZVNldDo6ZGlzcGxheU5hbWUoKSBjb25zdAogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBUeXBlU2V0OjphbGxQcmltaXRpdmVUeXBlTmFtZXMoKSBjb25z
dAogewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBz
ZWVuID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0g
ICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZUZ1bmN0aW9uKQotICAgICAgICAgc2Vlbi0+YWRkSXRl
bSgiRnVuY3Rpb24iKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlVW5kZWZpbmVkKQogICAg
ICAgICAgc2Vlbi0+YWRkSXRlbSgiVW5kZWZpbmVkIik7CiAgICAgaWYgKG1fc2VlblR5cGVzICYg
VHlwZU51bGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCShy
ZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgY2xhc3MgVHlwZVNldCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFR5cGVTZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFR5cGVT
ZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUeXBlU2V0KTsgfQogICAgIFR5cGVT
ZXQoKTsKLSAgICB2b2lkIGFkZFR5cGVGb3JWYWx1ZShKU1ZhbHVlIHYsIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CisgICAgdm9pZCBhZGRUeXBlSW5mb3JtYXRpb24o
UnVudGltZVR5cGUsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAg
ICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNlZW5UeXBlcygpIGNvbnN0OwogICAgIFN0cmlu
ZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTcyNDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTEgKzI4Myw4IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAvLyB3b24ndCB1c2UgdGhpcy4KICAgICBt
X3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyKCkpOwogCi0gICAgLy8gRklYTUU6IGNvbmRpdGlvbmFsbHkgYWxsb2NhdGUgdGhpcyBz
dHVmZiBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zcGVjdG9yIGlzIHJ1bm5pbmcgT1Ig
dGhpcyBmbGFnIGlzIGVuYWJsZWQgKG5vdCBqdXN0IGlmIHRoZSBmbGFnIGlzIGVuYWJsZWQpLgot
ICAgIGlmIChPcHRpb25zOjpwcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcj4oKTsKLSAgICAgICAgbV9oaWdoRmlkZWxpdHlMb2cgPSBzdGQ6Om1h
a2VfdW5pcXVlPEhpZ2hGaWRlbGl0eUxvZz4oKTsKLSAgICB9CisgICAgaWYgKE9wdGlvbnM6OnBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgZW5hYmxlSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZygpOwogfQogCiBWTTo6flZNKCkKQEAgLTg1OCw2ICs4NTUsMjQgQEAgdm9p
ZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAordm9pZCBW
TTo6ZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpCit7CisgICAgaWYgKGlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXI+KCk7CisgICAgbV9oaWdoRmlkZWxpdHlMb2cgPSBzdGQ6Om1ha2VfdW5pcXVlPEhp
Z2hGaWRlbGl0eUxvZz4oKTsKK30KKwordm9pZCBWTTo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmcoKQoreworICAgIGlmICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIucmVz
ZXQobnVsbHB0cik7CisgICAgbV9oaWdoRmlkZWxpdHlMb2cucmVzZXQobnVsbHB0cik7Cit9CisK
IHZvaWQgVk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpCiB7CiAgICAgaWYgKCFp
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzI0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkg
eyByZXR1cm4gbV9idWlsdGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0KIAogICAgICAgICBib29sIGlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkgeyByZXR1cm4gISFtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcjsgfQorICAgICAgICB2b2lkIGVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmcoKTsKKyAgICAgICAgdm9pZCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygp
OwogICAgICAgICBIaWdoRmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0dXJuIG1f
aGlnaEZpZGVsaXR5TG9nLmdldCgpOyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
ciogaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIuZ2V0KCk7IH0KICAgICAgICAgVHlwZUxvY2F0aW9uKiBuZXh0TG9jYXRpb24oKSB7
IHJldHVybiBtX2xvY2F0aW9uSW5mby5hZGQoKTsgfSAvL1RPRE86IHBvc3NpYmxlIG9wdG1pemF0
aW9uOiB3aGVuIGNvZGVibG9ja3MgZGllLCByZXBvcnQgd2hpY2ggbG9jYXRpb25zIGFyZSBubyBs
b25nZXIgYmVpbmcgY2hhbmdlZCBzbyB3ZSBkb24ndCB3YWxrIG92ZXIgdGhlbQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236421</attachid>
            <date>2014-08-11 17:56:52 -0700</date>
            <delta_ts>2014-08-12 17:27:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>97482</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBA
QAorMjAxNC0wOC0xMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRp
c2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZXJnZWQgb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBhbmQgb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlIGludG8KKyAgICAgICAgICBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBieSBhZGRpbmcgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBvcGNvZGUuCisgICAg
ICAgIC0gQWx0ZXJlZCBTeW1ib2xUYWJsZSB0byB1c2UgbGVzcyBtZW1vcnkgYnkgYWRkaW5nIGEg
cmFyZSBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgdHlwZSBwcm9maWxpbmcuCisgICAg
ICAgIC0gQ3JlYXRlZCBhbiBpbnRlcmZhY2UgdG8gdHVybiBvbiBhbmQgb2ZmIHR5cGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYgorICAgICAgICAgIEluc3BlY3Rvci4KKyAgICAgICAgLSBSZWZhY3Rv
cmVkIGhvdyBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIEhpZ2hGaWRlbGl0eUxvZyB0byBtYWtlIGl0
CisgICAgICAgICAgZWFzaWVyIHRvIGlubGluZSB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LgorICAgICAgICAtIEltcGxlbWVudGVkIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICBieSBpbmxpbmluZyB0aGUgcHJvY2Vz
cyBvZiB3cml0aW5nIHRvIHRoZSBsb2cgYW5kIGRvaW5nIGEgc21hbGwgYW1vdW50CisgICAgICAg
ICAgb2YgdHlwZSBpbmZlcmVuY2Ugb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2NvcGVEZXBlbmRlbnRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uOjpUeXBlTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNj
b3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5v
ZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJl
Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0
b3JSdW50aW1lQWdlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
cmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmFibGVkU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRGcm9tU2NvcGVDb21tb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMTElu
dDo6cHV0VG9TY29wZUNvbW1vbik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0
R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjppbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxp
dHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hG
aWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdo
RmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dFbmRQdHIpOgorICAgICAgICAoSlNDOjpIaWdoRmlk
ZWxpdHlMb2c6OmxvZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
Ojpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRj
aGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6
Y2xvbmVDYXB0dXJlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnByZXBhcmVG
b3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnVuaXF1ZUlERm9yVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVl
SURGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0
Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZv
clZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChK
U0M6OlN5bWJvbFRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojpn
ZXRSdW50aW1lVHlwZUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUlu
Zm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVz
KToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06OmVuYWJsZUhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNC0wOC0xMSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtbGFuZGluZyByMTcyNDAx
IHdpdGggZml4ZWQgdGVzdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDkgKzEwOSw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2Nv
cGUiLCAibGVuZ3RoIiA6IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9t
X3Njb3BlIiwgImxlbmd0aCIgOiA4IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRf
ZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSIsICJsZW5ndGgiIDogOCB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIg
OiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6
IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5n
dGgiIDogNCB9LApAQCAtMTIyLDcgKzEyMCw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9wcm9maWxlX3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfcHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlk
ZWxpdHkiLCAibGVuZ3RoIiA6IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aCIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfaGFzX2luZGV4ZWRfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2Zf
bGluZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZDoKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93
aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKQEAgLTEyMyw3ICsxMjIsNiBAQCB2b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9u
b3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFt
ZV9zY29wZToKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkOgpAQCAtMjUxLDcgKzI0OSw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JC
eXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKICAgICBj
YXNlIG9wX3B1c2hfd2l0aF9zY29wZToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKLSAgICBj
YXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6
CiAgICAgY2FzZSBvcF9lbmQ6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTMy
MSw3ICszMTgsNiBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAg
ICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dp
dGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2Fs
bDoKICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUy
Myw3ICsxNTIzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAg
ICAgICBvcGVyYW5kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAg
ICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTUzMiw4ICsxNTMxLDYgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICsraXQ7IC8vIFN0cnVj
dHVyZQogICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3Bl
cmFuZAogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAicHV0X3RvX3Njb3BlIik7Ci0gICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX3B1dF90
b19zY29wZV93aXRoX3Byb2ZpbGUpCi0gICAgICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMsICV1PCVzfCVzPiwgPHN0cnVjdHVyZT4sICVkIiwKICAg
ICAgICAgICAgICAgICByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLAogICAgICAgICAgICAg
ICAgIG1vZGVBbmRUeXBlLm9wZXJhbmQoKSwgcmVzb2x2ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1v
ZGUoKSksIHJlc29sdmVUeXBlTmFtZShtb2RlQW5kVHlwZS50eXBlKCkpLApAQCAtMTcxNiw2ICsx
NzEzLDExIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBi
b29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKICAgICAKICAgICBpZiAoU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAg
ICAgICAgaWYgKG1fdm0tPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2sp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nKGxvY2tlcik7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgICAg
ICBtX3N5bWJvbFRhYmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJv
bFRhYmxlLT5jbG9uZUNhcHR1cmVkTmFtZXMoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25l
U3ltYm9sVGFibGUgPSB0cnVlOwpAQCAtMTk0OSwxMyArMTk1MSwxMSBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAg
ICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBj
WzBdLnUub3Bjb2RlID09IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSA/IDIgOiAxKTsK
LSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNb
b3BMZW5ndGggLSBvZmZzZXRdLnUub3BlcmFuZF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsK
ICAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAg
ICAgICAgICAgIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIG9mZnNldF0gPSBwcm9maWxlOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKIAogICAgICAgICAgICAg
Ly8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlk
ZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKQEAgLTE5NjksMTYgKzE5NjksOSBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Au
c3RydWN0dXJlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChw
Y1swXS51Lm9wY29kZSA9PSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IGdldF9mcm9t
X3Njb3BlX3dpdGhfcHJvZmlsZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBT
dHJ1Y3R1cmUsIE9wZXJhbmQsIC4uLiwgVHlwZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgc2l6
ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAg
ICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVu
dCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
OF0udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGU6CiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAvLyBwdXRf
dG9fc2NvcGUgc2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUs
IE9wZXJhbmQKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmll
cihwY1syXS51Lm9wZXJhbmQpOwpAQCAtMTk5NSwzMCArMTk4OCw1MCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0
dXJlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51
Lm9wY29kZSA9PSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0
aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJl
LCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0
aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRp
b24qIGxvY2F0aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rp
b25PZmZzZXQpOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlv
biA9IGxvY2F0aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OiB7
CisgICAgICAgICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y2l0b24gaXM6IG9wX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9u
KiwgZmxhZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGlu
c3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGRpdm90U3RhcnQsIGRpdm90RW5kOwogICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnbG9i
YWxWYXJpYWJsZUlEOwogICAgICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7
CiAgICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0
aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwotCisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7CiAgICAg
ICAgICAgICBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcgPSBz
dGF0aWNfY2FzdDxQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnPihwY1sz
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVs
bHB0cjsKKwogICAgICAgICAgICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZToKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGU6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAg
ICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RS
ZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgKGZsYWcg
PT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGUgPyBHZXQgOiBQdXQpLCB0eXBlKTsK
KworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50
eXBlIGhlcmUsIGFuZCBhbHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0
aWNhbGx5IGRldGVybWluZSB0aGUgZ2xvYmFsSUQKKyAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MTg0CisgICAgICAgICAgICAgICAg
aWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWNhdXNlIHRoZXJlIGlzIGEg
Y2hhbmNlIHdlIG1heSBncmFiIGEgU3ltYm9sIFRhYmxlIHRoYXQgaGFzbid0IGJlZW4gcHJlcGFy
ZWQgZm9yIHByb2ZpbGluZyBmcm9tIGFuIG91dGVyIHNjb3BlLgorICAgICAgICAgICAgICAgICAg
ICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcobG9ja2Vy
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51
bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZv
clZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxp
dHlOb0dsb2JhbElERXhpc3RzOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQ6IHsK
KyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fc3ltYm9sVGFibGUuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlx
dWVJREZvclJlZ2lzdGVyKGxvY2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7
Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBl
U2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsK
KyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlE
Rm9yUmVnaXN0ZXIobG9ja2VyLCBwcm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAg
ICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRG
b3JSZWdpc3Rlcihsb2NrZXIsIHByb2ZpbGVSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9m
aWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQ6IApAQCAtMjAyNiwxMCArMjAzOSw2
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAg
ICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJv
ZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3Q6IHsKLSAgICAgICAgICAgICAgICBn
bG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewogICAgICAgICAgICAgICAgIGdsb2Jh
bFR5cGVTZXQgPSByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7CiAgICAgICAgICAgICAgICAgZ2xv
YmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudDsKQEAgLTIwNDMsNyAr
MjA1Miw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2Nh
dGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJ
RCwgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBn
bG9iYWxUeXBlU2V0LCB2bSgpKTsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24q
LCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+
dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCisg
ICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQs
IGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKICAgICAgICAgICAgIFR5cGVMb2NhdGlv
biogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CiAgICAgICAgICAgICBib29sIGlzTmV3
TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwogCkBAIC0yNTI0LDkgKzI1MzQsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAg
YWN0aXZhdGlvbi5jbGVhcigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAg
ICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgICAgICAgICAgY2FzZSBvcF9wdXRf
dG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
IHsKICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQogICAg
ICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUoY3VySW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKTsKQEAgLTM5MzUsMzUgKzM5NDMsNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2Rl
QmxvY2s6OmNhcGFiaWxpCiB9CiAjZW5kaWYKIAotVHlwZUxvY2F0aW9uKiBDb2RlQmxvY2s6OnNj
b3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3Agb3AsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQpCi17Ci0gICAgdW5zaWduZWQgZGl2b3RTdGFydCwg
ZGl2b3RFbmQ7Ci0gICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVj
dGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgIEdsb2JhbFZhcmlhYmxlSUQg
Z2xvYmFsVmFyaWFibGVJRDsKLSAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKLQot
ICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBh
bHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWlu
ZSB0aGUgZ2xvYmFsSUQKLSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOwot
ICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIpIAotICAgICAgICBzeW1ib2xUYWJsZSA9IG9w
LmFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCk7Ci0gICAgZWxzZSBpZiAob3AudHlwZSA9PSBHbG9i
YWxWYXIpCi0gICAgICAgIHN5bWJvbFRhYmxlID0gbV9nbG9iYWxPYmplY3QuZ2V0KCktPnN5bWJv
bFRhYmxlKCk7Ci0gICAgCi0gICAgaWYgKHN5bWJvbFRhYmxlKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICBnbG9iYWxW
YXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpZGVu
dC5pbXBsKCksICp2bSgpKTsKLSAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5n
bG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFs
SURFeGlzdHM7Ci0KLSAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25Q
YWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hl
KCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELCBtX293bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVTZXQsIHZtKCkpOwot
ICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7Ci0gICAgYm9v
bCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKLQotICAgIGlmIChzaG91bGRB
bmFseXplICYgaXNOZXdMb2NhdGlvbikKLSAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKLQotICAgIHJldHVybiBsb2Nh
dGlvbjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjAs
OCArMTAyMCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQdHIo
bmV3IFJhcmVEYXRhKTsKICAgICB9CiAKLSAgICBUeXBlTG9jYXRpb24qIHNjb3BlRGVwZW5kZW50
UHJvZmlsZShSZXNvbHZlT3AsIGNvbnN0IElkZW50aWZpZXImLCBzaXplX3QpOwotICAgIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgdm9pZCByZXNldFN0dWJJbnRlcm5hbChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKICAgICB2b2lkIHJlc2V0U3R1YkR1cmluZ0dDSW50ZXJuYWwo
UmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzI0MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDIyICszMywyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGVudW0gSGlnaEZpZGVs
aXR5R2xvYmFsSURGbGFncyB7CiAgICAgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRp
b24gPSAtMSwKICAgICBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzID0gLTIsCi0gICAgSGln
aEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMsCi0gICAgSGlnaEZpZGVsaXR5VGhpc1N0YXRl
bWVudCA9IC00CisgICAgSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMKIH07CiAKIHR5
cGVkZWYgaW50cHRyX3QgR2xvYmFsVmFyaWFibGVJRDsKIAogY2xhc3MgVHlwZUxvY2F0aW9uIHsK
IHB1YmxpYzoKLSAgICBUeXBlTG9jYXRpb24oKSAKLSAgICAgICAgOiBtX2Rpdm90Rm9yRnVuY3Rp
b25PZmZzZXRJZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkKKyAgICBUeXBlTG9jYXRpb24oKQor
ICAgICAgICA6IG1fbGFzdFNlZW5UeXBlKFR5cGVOb3RoaW5nKQorICAgICAgICAsIG1fZGl2b3RG
b3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50KFVJTlRfTUFYKQogICAgICAgICAsIG1f
aW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNyZWF0ZSgpKQogICAgICAgICAsIG1fZ2xvYmFs
VHlwZVNldChudWxscHRyKQogICAgIHsKICAgICB9CiAKICAgICBHbG9iYWxWYXJpYWJsZUlEIG1f
Z2xvYmFsVmFyaWFibGVJRDsKKyAgICBSdW50aW1lVHlwZSBtX2xhc3RTZWVuVHlwZTsKICAgICBp
bnRwdHJfdCBtX3NvdXJjZUlEOwogICAgIHVuc2lnbmVkIG1fZGl2b3RTdGFydDsKICAgICB1bnNp
Z25lZCBtX2Rpdm90RW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MjQyMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOCArMTE1LDEzIEBAIFBhcnNlckVycm9yIEJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgp
OwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQorICAgIGlmIChtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSkgeworICAgICAgICBpZiAobV9jb2RlQmxvY2stPnZtKCktPmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwor
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnByZXBhcmVGb3JIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgIH0KICAgICAgICAgbV9jb2RlQmxv
Y2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9uZUNhcHR1
cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CisgICAgfQogCiAgICAgaWYgKG1fZXhwcmVz
c2lvblRvb0RlZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0
T2ZNZW1vcnkpOwpAQCAtMTAwNSw3ICsxMDEwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRNb3ZlKAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxl
VmFyaWFibGUoZHN0LT5pbmRleCgpKSk7CiAKICAgICBpZiAoIWRzdC0+aXNUZW1wb3JhcnkoKSAm
JiBpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICBlbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShkc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFs
SUQpOworICAgICAgICBlbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShkc3QsIFByb2Zp
bGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIGRzdDsK
IH0KQEAgLTExMjQsMTIgKzExMjksMTggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhp
Z2hGaWRlbGl0eQogICAgIG1fY29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4
cHJlc3Npb25JbmZvKGluc3RydWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKIH0KIAotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0
ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRl
Y29kZUZsYWcgZmxhZykKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcsIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50aWZpZXIpCiB7CisgICAgaWYgKGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9t
U2NvcGUgfHwgZmxhZyA9PSBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUpCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlkZW50aWZpZXIpOworCisgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlz
IGluc3RydWNpdG9uIGlzOiBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSByZWdU
b1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlwZT8K
ICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVnaXN0ZXJUb1Byb2ZpbGUtPmluZGV4KCkpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0
aGUgVHlwZUxvY2F0aW9uIG9iamVjdCBwb2ludGVyLgorICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmxhZyk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGlkZW50aWZpZXIgPyBhZGRDb25zdGFudCgqaWRlbnRpZmllcikgOiAwKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CiB9CiAKIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wgYikKQEAg
LTEyNzEsMjIgKzEyODIsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEZyCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlTW9kZSByZXNvbHZl
TW9kZSkKLXsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihp
bnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpOwot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1v
ZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2lu
dGVyLgotICAgIHJldHVybiBkc3Q7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQogewog
ICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9u
cygpLnNpemUoKSk7CkBAIC0xMzAyLDIxICsxMjk3LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRUbwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCog
c2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlLCBS
ZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKLXsKLSAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotCi0gICAgZW1pdE9wY29k
ZShvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVN
b2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOyAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgVHlwZUxvY2F0aW9uIHBv
aW50ZXIuCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEluc3RhbmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVnaXN0ZXJJRCogYmFzZVByb3RvdHlwZSkKIHsgCiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5j
ZW9mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIzLDEyICsyMjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRyeURhdGEq
IHRyeURhdGE7CiAgICAgfTsKIAotICAgIGVudW0gUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eUJ5dGVjb2RlRmxhZyB7IAorICAgIGVudW0gUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5
dGVjb2RlRmxhZyB7CisgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwKKyAg
ICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGUsCiAgICAgICAgIFByb2ZpbGVU
eXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQsCiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCwKICAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFy
Z3VtZW50LAotICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdCwK
LSAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCAgCisg
ICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQKICAgICB9
OwogCiAgICAgY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3IgewpAQCAtNDEwLDcgKzQxMSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpOwotICAgICAgICB2b2lkIGVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIGRzdCwgUHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyk7CisgICAgICAgIHZvaWQgZW1pdFByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUsIFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcsIGNvbnN0IElkZW50aWZpZXIqKTsK
IAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSk7CkBA
IC00NzcsOSArNDc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0
ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRGcm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYsIFJlc29sdmVNb2RlKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEZyb21T
Y29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0
IElkZW50aWZpZXImLCBSZXNvbHZlTW9kZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRU
b1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCog
dmFsdWUsIFJlc29sdmVNb2RlKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGVX
aXRoUHJvZmlsZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVy
SUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1p
dExhYmVsKExhYmVsKik7CiAgICAgICAgIHZvaWQgZW1pdExvb3BIaW50KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsMTQgQEAgUmVn
aXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogewogICAgIGlmIChkc3QgPT0g
Z2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZ2VuZXJhdG9yLnRoaXNS
ZWdpc3RlcigpKTsKKworICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICBpZiAo
Z2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldCwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRoaXNMZW5ndGggPSA0OworICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBKU1RleHRQ
b3NpdGlvbigtMSwgcG9zaXRpb24oKS5vZmZzZXQgKyB0aGlzTGVuZ3RoLCAtMSkpOworICAgIH0K
KyAgICByZXR1cm4gcmV0OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUzLDcg
KzE2MCw3IEBAIFJlZ2lzdGVySUQqIFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICAg
ICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoKSkgewotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KGxvY2FsLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShs
b2NhbC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVsbHB0cik7CiAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNz
aW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1RleHRQb3NpdGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQg
KyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxvY2FsLmdldCgpKTsKQEAgLTE2
MiwxMiArMTY5LDEyIEBAIFJlZ2lzdGVySUQqIFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkK
ICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdCA9IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOwog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29w
ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOwotICAgIFJlZ2lzdGVy
SUQqIHJldDsKKyAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0RnJv
bVNjb3BlKGZpbmFsRGVzdCwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7
CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93
SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlLCAmbV9p
ZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKG1fcG9zaXRpb24sIEpTVGV4dFBvc2l0aW9uKC0xLCBtX3Bvc2l0aW9uLm9m
ZnNldCArIG1faWRlbnQubGVuZ3RoKCksIC0xKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldCA9
IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KICAgICBy
ZXR1cm4gcmV0OwogfQogCkBAIC0zODcsNyArMzk0LDcgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFj
Y2Vzc29yTm9kZTo6ZW1pdEJ5dAogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKICAgICBpZiAo
Z2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJv
ZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTQxMyw3ICs0MjAsNyBA
QCBub25Bcmd1bWVudHNQYXRoOgogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZSwgbV9pZGVudCk7CiAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBl
c0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC00OTcsNyArNTA0LDcgQEAgUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0QgogICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURv
ZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC01MTgsNyArNTI1LDcgQEAgUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJs
ZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KICAgICAg
ICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgp
LCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9m
aWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0
OwpAQCAtNTM0LDcgKzU0MSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWkKICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmdW5jLmdldCgpLCBjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJl
Z2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVu
Yy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURv
ZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC01NTMsNyArNTYwLDcgQEAgUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaQogICAgIGdlbmVyYXRvci5lbWl0TW92ZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKICAgICBSZWdpc3RlcklE
KiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNTcxLDcgKzU3OCw3IEBAIFJlZ2lzdGVySUQq
IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXQKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
ZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwog
ICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQo
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlw
ZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBl
c0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC02NDUsNyArNjUyLDcg
QEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuaXNQ
cm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwpA
QCAtNzU5LDcgKzc2Niw3IEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIH0KICAgICBp
ZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVl
LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1
cm5WYWx1ZS5nZXQoKTsKQEAgLTgxNCwxMSArODIxLDExIEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhO
b2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5l
cmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGlkZW50KTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVudCwgVGhyb3dJZk5v
dEZvdW5kKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gb2xkVmFsdWUgPSBlbWl0UG9zdEluY09y
RGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0
KCksIG1fb3BlcmF0b3IpOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQo
KSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdl
dCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9T
Y29wZSwgJmlkZW50KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwg
dmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgfQogCiAgICAgcmV0dXJuIG9sZFZh
bHVlLmdldCgpOwogfQpAQCAtODQyLDcgKzg0OSw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2Rl
OjplbWl0QnJhY2tldChCeXQKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwogICAgIGlmIChnZW5l
cmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2Zp
bGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgb2xkVmFsdWUpOwpAQCAtODY2LDcgKzg3Myw3IEBAIFJlZ2lzdGVy
SUQqIFBvc3RmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2QKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSk7CiAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1ZSk7CkBAIC0xMDAyLDExICsxMDA5LDExIEBA
IFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dGUKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGlkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNj
b3BlLmdldCgpLCBpZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBlbWl0SW5jT3JEZWMoZ2Vu
ZXJhdG9yLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRU
b1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7
CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgp
LCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwotICAgIH0gZWxzZSAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNj
b3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgfQog
ICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHZhbHVl
LmdldCgpKTsKIH0KIApAQCAtMTAyNyw3ICsxMDM0LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9k
ZTo6ZW1pdEJyYWNrZXQoQnl0ZQogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5
VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwog
ICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCBwcm9wRHN0LmdldCgpKTsKQEAgLTEwNDksNyArMTA1Niw3IEBAIFJlZ2lzdGVySUQqIFByZWZp
eE5vZGU6OmVtaXREb3QoQnl0ZWNvZGUKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKGJhc2UuZ2V0KCksIGlkZW50LCB2YWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0K
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9w
RHN0LmdldCgpKTsKQEAgLTE1MjAsMTIgKzE1MjcsMTEgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlm
eVJlc29sdmVOb2RlOjplbWl0QgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9pZGVudCk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2Nv
cGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJ
Zk5vdEZvdW5kKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdFJlYWRNb2Rp
ZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2
YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlw
ZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigp
KSwgdGhpcyk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OyAKKyAgICBSZWdpc3RlcklEKiByZXQgPSBn
ZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQo
KSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJ
Zk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KHJlc3VsdC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmbV9p
ZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwg
cmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KICAgICByZXR1cm4gcmV0Owog
fQogCkBAIC0xNTU5LDEyICsxNTY1LDExIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWMKICAgICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9yaWdodCk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAg
IFJlZ2lzdGVySUQqIHJldDsKKyAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1
dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlz
U3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewot
ICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5n
ZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBU
aHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXN1bHQuZ2V0KCksIFByb2ZpbGVU
eXBlc0J5dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3Ry
aWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAg
IH0gCiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTU3OSw3ICsxNTg0LDcgQEAgUmVnaXN0ZXJJ
RCogQXNzaWduRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKAogICAgIFJlZ2lzdGVySUQqIGZvcndhcmRS
ZXN1bHQgPSAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpID8gcmVzdWx0IDogZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihyZXN1bHQpLCByZXN1bHQpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgp
LCBtX2lkZW50LCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQo
ZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAgLTE1OTgsNyArMTYwMyw3IEBAIFJlZ2lzdGVySUQqIFJl
YWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWMKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHVwZGF0ZWRW
YWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0
eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRh
dGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXQ7CkBAIC0xNjI0LDcgKzE2MjksNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjCiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJh
dG9yLmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgZm9y
d2FyZFJlc3VsdCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoZm9yd2FyZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
LCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAg
cmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2FyZFJl
c3VsdCk7CkBAIC0xNjQ0LDcgKzE2NDksNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tl
dE5vZGU6OmVtaXRCCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFz
ZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHVwZGF0ZWRWYWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgfQogCkBAIC0yMjUxLDcgKzIyNTYsNyBAQCB2b2lkIFJldHVybk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlCiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0
dXJuUmVnaXN0ZXIgPSBtX3ZhbHVlID8gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV92YWx1ZSkg
OiBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZ2VuZXJh
dG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdldCgp
LCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVy
LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50LCBudWxs
cHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhw
cmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgaWYgKGdl
bmVyYXRvci5zY29wZURlcHRoKCkpIHsKQEAgLTI1ODIsMTcgKzI1ODcsMTMgQEAgdm9pZCBFdmFs
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZQogdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7
CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0KC0xLCBtX3N0YXJ0U3RhcnRPZmZzZXQsIC0x
KTsgLy8gVGhpcyBkaXZvdCBpcyBhdCB0aGUgb3BlbiBicmFjZSBvZiB0aGUgZnVuY3Rpb24uCi0g
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGVuZCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0ICsgMSwgLTEp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZ2Vu
ZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09i
amVjdCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKHN0YXJ0LCBlbmQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4KICAgICAgICAgICAg
IGlmICghbV9wYXJhbWV0ZXJzLT5hdChpKS0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQmluZGluZ05vZGUqIHBhcmFtZXRlciA9IHN0YXRp
Y19jYXN0PEJpbmRpbmdOb2RlKj4obV9wYXJhbWV0ZXJzLT5hdChpKSk7CiAgICAgICAgICAgICBS
ZWdpc3RlcklEIHJlZyhDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKLSAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQcm9maWxl
VHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCZyZWcsIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RnVuY3Rpb25Bcmd1bWVudCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhwYXJhbWV0ZXItPmRpdm90U3Rh
cnQoKSwgcGFyYW1ldGVyLT5kaXZvdEVuZCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MTQs
NyArMjYxNSw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAg
ICBpZiAoIXJldHVybk5vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3Iu
aXNDb25zdHJ1Y3RvcigpID8gZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpIDogZ2VuZXJhdG9yLmVt
aXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocjAsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rp
b25SZXR1cm5TdGF0ZW1lbnQpOyAvLyBEbyBub3QgZW1pdCBleHByZXNzaW9uIGluZm8gZm9yIHRo
aXMgcHJvZmlsZSBiZWNhdXNlIGl0J3Mgbm90IGluIHRoZSB1c2VyJ3Mgc291cmNlIGNvZGUuCisg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocjAs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOyAv
LyBEbyBub3QgZW1pdCBleHByZXNzaW9uIGluZm8gZm9yIHRoaXMgcHJvZmlsZSBiZWNhdXNlIGl0
J3Mgbm90IGluIHRoZSB1c2VyJ3Mgc291cmNlIGNvZGUuCiAgICAgICAgIEFTU0VSVChzdGFydE9m
ZnNldCgpID49IGxpbmVTdGFydE9mZnNldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5l
U3RhcnRPZmZzZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHIwKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAkocmV2aXNpb24gMTcyNDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNj
b3BlLmgiCiAjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVn
U2VydmVyLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlZNRW50cnlTY29w
ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAKQEAgLTYxLDYgKzYzLDcgQEAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0
b3JSdW50aW1lQQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKQogICAgICwgbV9zY3JpcHREZWJ1Z1NlcnZlcihudWxscHRyKQogICAgICwgbV9lbmFi
bGVkKGZhbHNlKQorICAgICwgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVkKGZhbHNlKQogewogfQog
CkBAIC0xOTksOCArMjAyLDEwIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50
aW1lVHkKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsVk0oKTsKICAgICB0eXBlRGVzY3JpcHRpb25zID0gSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0
aW9uPjo6Y3JlYXRlKCk7Ci0gICAgaWYgKCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKQorICAgIGlmICghdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
eworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIlRoZSBWTSBkb2VzIG5vdCBj
dXJyZW50bHkgaGF2ZSBUeXBlIEluZm9ybWF0aW9uLiIpOwogICAgICAgICByZXR1cm47CisgICAg
fQogCiAgICAgZG91YmxlIHN0YXJ0ID0gY3VycmVudFRpbWVNUygpOwogICAgIHZtLmhpZ2hGaWRl
bGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1ZXJ5Iik7CkBAIC0yMzEs
NiArMjM2LDc3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHkKICAg
ICAgICAgZGF0YUxvZ0YoIkluc3BlY3Rvcjo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRP
ZmZzZXRzIHRvb2sgJWxmbXNcbiIsIGVuZCAtIHN0YXJ0KTsKIH0KIAorY2xhc3MgVHlwZVJlY29t
cGlsZXIgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBp
bmxpbmUgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmICgh
Y2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJD
b2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJVbmxpbmtlZENv
ZGVGb3JSZWNvbXBpbGF0aW9uSWZOb3RDb21waWxpbmcoKTsKKyAgICB9Cit9OworCitzdGF0aWMg
dm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcoVk0mIHZtLCBib29s
IHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpCit7CisgICAgdm0ud2FpdEZvckNvbXBpbGF0aW9u
c1RvQ29tcGxldGUoKTsKKworICAgIGJvb2wgbmVlZHNUb1JlY29tcGlsZTsKKyAgICBpZiAoc2hv
dWxkRW5hYmxlVHlwZVByb2ZpbGluZykKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHZtLmVu
YWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIG5lZWRz
VG9SZWNvbXBpbGUgPSB2bS5kaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworCisg
ICAgaWYgKG5lZWRzVG9SZWNvbXBpbGUpIHsKKyAgICAgICAgVHlwZVJlY29tcGlsZXIgcmVjb21w
aWxlcjsKKyAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKHZtLmhlYXAp
OworICAgICAgICB2bS5oZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlv
blNjb3BlLCByZWNvbXBpbGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVh
c29uIHJlYXNvbikKK3sKKyAgICBpZiAocmVhc29uID09IEluc3BlY3RvckRpc2Nvbm5lY3RSZWFz
b246Okluc3BlY3RvckRlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQpCisgICAg
ICAgIHNldEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkU3RhdGUoZmFsc2UpOworfQor
Cit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZyhFcnJvclN0cmluZyopCit7CisgICAgaWYgKG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVkID0gdHJ1ZTsK
KyAgICBzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKHRydWUpOworfQor
Cit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmcoRXJyb3JTdHJpbmcqKQoreworICAgIGlmICghbV9pc1R5cGVQcm9maWxpbmdFbmFibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQgPSBmYWxz
ZTsKKyAgICBzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGZhbHNlKTsK
K30KKwordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmFibGVkU3RhdGUoYm9vbCBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbFZNKCk7CisKKyAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcs
IGl0J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKKyAgICAvLyB1cCB0
aHJvd2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KKyAgICBpZiAodm0u
ZW50cnlTY29wZSkgeworICAgICAgICB2bS5lbnRyeVNjb3BlLT5zZXRFbnRyeVNjb3BlRGlkUG9w
TGlzdGVuZXIodGhpcywKKyAgICAgICAgICAgIFs9XSAoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCop
IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
Rm9yVHlwZVByb2ZpbGluZyh2bSwgc2hvdWxkRW5hYmxlVHlwZVByb2ZpbGluZyk7IAorICAgICAg
ICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZQorICAgICAgICByZWNvbXBpbGVBbGxKU0Z1
bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkocmV2aXNpb24gMTcyNDIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAgY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZQogcHVibGljOgogICAgIHZpcnR1YWwgfkluc3BlY3Rv
clJ1bnRpbWVBZ2VudCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworCiAgICAgdmly
dHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgb3ZlcnJpZGUgeyBt
X2VuYWJsZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6U3ludGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKQEAgLTY3LDYgKzY5LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0
dWFsIHZvaWQgcnVuKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyosIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
VHlwZURlc2NyaXB0aW9uPj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmluZyopIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmluZyopIG92
ZXJyaWRlOwogICAgIAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2NyaXB0RGVidWdT
ZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIgPSBzY3JpcHRE
ZWJ1Z1NlcnZlcjsgfQogCkBAIC04NCw5ICs4OCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CiAKIHByaXZhdGU6CisgICAgdm9pZCBzZXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGJvb2wpOwogICAgIEluamVjdGVkU2Ny
aXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgU2NyaXB0RGVidWdTZXJ2
ZXIqIG1fc2NyaXB0RGVidWdTZXJ2ZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgYm9vbCBt
X2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9u
IDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEx
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OmRpZENyZWEKICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
YmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0UnVudGlt
ZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0
UmVhc29uKQordm9pZCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIu
Y2xlYXIoKTsKKyAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIFZNJiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6
Z2xvYmFsVk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9SdW50aW1lLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNiArMjM5LDE0IEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBl
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJUeXBlRGVzY3JpcHRpb24i
LCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVlc3RlZCB2YXJpYWJsZS4iIH0gfQogICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIGRldGFpbGVk
IGluZm9ybXRhdGlvbiBvbiBnaXZlbiBmdW5jdGlvbi4iCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmciLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZXMgaGlnaCBmaWRlbGl0eSB0eXBlIHBy
b2ZpbGluZyBvbiB0aGUgVk0uIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgaGlnaCBmaWRlbGl0eSB0eXBlIHByb2ZpbGluZyBvbiB0
aGUgVk0uIgogICAgICAgICB9CiAgICAgXSwKICAgICAiZXZlbnRzIjogWwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OlNTRTJDaGVja1MKICNpbmNsdWRlICJBcml0eUNoZWNr
RmFpbFJldHVyblRodW5rcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRG
R0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9w
ZXJhdGlvbnMuaCIKQEAgLTI2Nyw2ICsyNjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9pbmMpCiAgICAgICAgIERFRklORV9PUChv
cF9wcm9maWxlX2RpZF9jYWxsKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV93aWxsX2Nh
bGwpCisgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0
eSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmFtZV9zY29wZSkKICAgICAgICAgREVGSU5F
X09QKG9wX3B1c2hfd2l0aF9zY29wZSkKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29m
X2xpbmU6CkBAIC00OTgsNiArNTAwLDEwIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoSkkKICAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJs
b2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQg
d2UgaGF2ZSB0aGUgbW9zdCB1cCB0byBkYXRlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBwZXJmb3Jt
aW5nIHR5cGVjaGVjayBvcHRpbWl6YXRpb25zIGZvciBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eS4KKyAgICBpZiAobV92bS0+aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkKKyAgICAgICAgbV92bS0+aGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2coIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiIpOwogICAgIAogICAgIGlmIChP
cHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IEpJVERpc2Fzc2VtYmxlciht
X2NvZGVCbG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzI0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MjcsNiArNTI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9p
bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKElu
c3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9uYW1l
X3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX3dpdGhfc2Nv
cGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9ieV9pZChJbnN0cnVj
dGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA4LDYgKzEzMDgsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydQogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdo
X2ZpZGVsaXR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5j
bHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJUeXBlTG9j
YXRpb24uaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC0xMzM4LDYgKzEzNDAsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5n
KEluc3RydQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9m
aWRlbGl0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFR5cGVMb2Nh
dGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRp
b247CisgICAgaW50IHZhbHVlVG9Qcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKworICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKKworICAgIC8vIENvbXBpbGUgaW4gYSBw
cmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAg
d3JpdGluZyB0byB0aGUgbG9nLgorICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQg
dG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0LWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgorICAgIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwor
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpKTsKKyAgICB9IGVsc2UgaWYgKGNh
Y2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bGwpIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRp
b24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH4xKSwgcmVnVDApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KFZhbHVlRmFsc2UpKSk7CisgICAgfSBlbHNlIGlmIChj
YWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVNYWNoaW5lSW50KSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCkp
OworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlTnVtYmVyKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2Zp
bGUsIHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChlbWl0SnVtcElmSW1tZWRpYXRl
TnVtYmVyKHJlZ1QwKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwocmVnVDApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgfQorCisgICAgSGlnaEZpZGVsaXR5TG9nKiBjYWNoZWRIaWdoRmlkZWxpdHlMb2cgPSBtX3Zt
LT5oaWdoRmlkZWxpdHlMb2coKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkSGlnaEZp
ZGVsaXR5TG9nKSwgcmVnVDIpOworICAgIC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGludG8g
VDEuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBIaWdoRmlkZWxpdHlMb2c6OmN1cnJlbnRM
b2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOworCisgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlv
biBvbiB0aGUgbG9nIGVudHJ5LgorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9j
YXRpb24pLCByZWdUMCk7CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZp
ZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworCisgICAgLy8gU3RvcmUg
dGhlIEpTVmFsdWUgb24gdGhlIGxvZyBlbnRyeS4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkpOworCisgICAgLy8g
U3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIFQwIGlzIGEgY2VsbCwgb3RoZXJ3
aXNlLCBzdG9yZSAwLCBvbiB0aGUgbG9nIGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwocmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkp
OworICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7
CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0
eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBza2lwSXNDZWxsLmxp
bmsodGhpcyk7CisKKyAgICAvLyBJbmNyZW1lbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeSkp
LCByZWdUMSk7CisgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5
TG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgIEp1bXAgc2tpcENsZWFyTG9nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRIaWdoRmlkZWxp
dHlMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0
aGUgZW5kIG9mIHRoZSBsb2cuCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DbGVhckhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlckxvZyk7CisgICAgc2tpcENsZWFyTG9nLmxpbmsodGhpcyk7CisK
KyAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
RnV6ei5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0
eUxvZy5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJKSVQu
aCIKICNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAt
MTkyMSw2ICsxOTIyLDExIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4
U3QKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCkuc3RyaW5nKCkpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2xlYXJIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXJMb2coRXhlY1N0YXRlKiBleGVjKQoreworICAgIGV4ZWMtPnZt
KCkuaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIkxvZyBGdWxsLCBj
YWxsZWQgZnJvbSBpbnNpZGUgYmFzZWxpbmUgSklUIik7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgog
CiAvLyBOb3RlOiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRv
IGJlIHBsYWNlZCBiZWZvcmUgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQsOCBAQCBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJpCiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0
cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNsZWFySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyTG9nKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKKwogfSAvLyBleHRlcm4gIkMiCiAKIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJh
dGlvbkxpbmtGb3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MCwxNSArNTQw
LDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19yZWdleAogICAgIExMSU5U
X1JFVFVSTihSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSkKLXsKLSAgICBM
TElOVF9CRUdJTigpOwotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBwY1syXS51LmxvY2F0
aW9uOwotICAgIEpTVmFsdWUgdmFsID0gTExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7Ci0gICAgdm0u
aGlnaEZpZGVsaXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbCwg
bG9jYXRpb24pOwotICAgIExMSU5UX0VORF9JTVBMKCk7Ci19Ci0KIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jaGVja19oYXNfaW5zdGFuY2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
QEAgLTEzNzUsOCArMTM2NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVz
b2x2ZV9zCiAgICAgTExJTlRfUkVUVVJOKEpTU2NvcGU6OnJlc29sdmUoZXhlYywgZXhlYy0+c2Nv
cGUoKSwgaWRlbnQpKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4
ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBWTSYgdm0pCitMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpCiB7CisgICAgTExJTlRfQkVHSU4oKTsKKwog
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZp
ZXIocGNbM10udS5vcGVyYW5kKTsKICAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihMTElOVF9PUCgyKS5qc1ZhbHVlKCkpOwogICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2Rl
QW5kVHlwZShwY1s0XS51Lm9wZXJhbmQpOwpAQCAtMTM4NCw4ICsxMzc3LDggQEAgc3RhdGljIEpT
VmFsdWUgZ2V0RnJvbVNjb3BlQ29tbW9uKEV4ZWNTdAogICAgIFByb3BlcnR5U2xvdCBzbG90KHNj
b3BlKTsKICAgICBpZiAoIXNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3Qp
KSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQot
ICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgICAgIExMSU5UX1JFVFVSTihleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKSk7
CisgICAgICAgIExMSU5UX1JFVFVSTihqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICAvLyBD
b3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5
IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBp
bGUgdGltZS4KQEAgLTE0MDIsMjcgKzEzOTUsMTMgQEAgc3RhdGljIEpTVmFsdWUgZ2V0RnJvbVNj
b3BlQ29tbW9uKEV4ZWNTdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Z2V0X2Zyb21fc2NvcGUpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4ZWMsIHBjLCB2bSk7Ci0gICAgTExJTlRfUkVUVVJOKHZh
bHVlKTsKKyAgICBMTElOVF9SRVRVUk4oc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkpOwogfQog
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9m
aWxlKQorTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKIHsKICAg
ICBMTElOVF9CRUdJTigpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRGcm9tU2NvcGVDb21tb24o
ZXhlYywgcGMsIHZtKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbOF0udS5sb2Nh
dGlvbjsKLSAgICB2bS5oaWdoRmlkZWxpdHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9y
TG9jYXRpb24odmFsdWUsIGxvY2F0aW9uKTsKLSAgICBMTElOVF9SRVRVUk4odmFsdWUpOwotfQog
Ci1zdGF0aWMgSlNPYmplY3QqIHB1dFRvU2NvcGVDb21tb24oRXhlY1N0YXRlKiBleGVjLCBJbnN0
cnVjdGlvbiogcGMpCi17CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihwY1syXS51Lm9wZXJhbmQpOwogICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVj
dCo+KExMSU5UX09QKDEpLmpzVmFsdWUoKSk7CkBAIC0xNDMwLDM1ICsxNDA5LDEzIEBAIHN0YXRp
YyBKU09iamVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVjU3QKICAgICBSZXNvbHZlTW9kZUFuZFR5
cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKIAog
ICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFzY29wZS0+
aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKQotICAgICAgICByZXR1cm4gY3JlYXRlVW5kZWZpbmVk
VmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKIAogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBzY29wZS0+bWV0
aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAog
ICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVC
bG9jaywgcGMsIHNjb3BlLCBtb2RlQW5kVHlwZSwgc2xvdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKLXsK
LSAgICBMTElOVF9CRUdJTigpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHB1dFRvU2NvcGVDb21t
b24oZXhlYywgcGMpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTExJTlRfVEhST1coZXJyb3Ip
OwotICAgIExMSU5UX0VORCgpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSkKLXsKLSAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMg
aW5zdHJ1Y3Rpb24gaXMgdGhlIHNhbWUgYXMgcHV0X3RvX3Njb3BlIHdpdGggYSBUeXBlTG9jYXRp
b24gYXBwZW5kZWQ6IHB1dF90b19zY29wZV93aXRoX3Byb2ZpbGUgc2NvcGUsIGlkLCB2YWx1ZSwg
UmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQsIFR5cGVMb2NhdGlvbioKLSAg
ICBMTElOVF9CRUdJTigpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IHB1dFRvU2NvcGVDb21tb24o
ZXhlYywgcGMpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTExJTlRfVEhST1coZXJyb3IpOwot
ICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBwY1s3XS51LmxvY2F0aW9uOwotICAgIEpTVmFs
dWUgdmFsID0gTExJTlRfT1BfQygzKS5qc1ZhbHVlKCk7Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9n
KCktPnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbCwgbG9jYXRpb24pOwogICAg
IExMSU5UX0VORCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMCArMTE4
LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcgogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0aW9uKTsKIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKTsKLUxMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsK
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlKTsKLUxM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X3RvX3Njb3BlX3dpdGhfcHJv
ZmlsZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KTsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxs
aW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiwgUHJvdG9DYWxsRnJhbWUqKSBXVEZf
SU5URVJOQUw7CiAjaWYgIUVOQUJMRShKSVQpCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lOVEVS
TkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgx
LDE1ICsxMjgxLDUgQEAgX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKICAgICBkaXNw
YXRjaCg1KQogCiBfbGxpbnRfb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHk6Ci0g
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCi0gICAgZGlzcGF0Y2goNCkKLQotX2xsaW50X29wX3B1dF90b19zY29wZV93aXRo
X3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi0gICAgZGlzcGF0Y2goOCkKLQot
X2xsaW50X29wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKLSAgICB0cmFjZUV4ZWN1dGlv
bigpCi0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGVfd2l0
aF9wcm9maWxlKQotICAgIGRpc3BhdGNoKDkpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhf
cHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCisgICAgZGlzcGF0Y2goNikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24g
MTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENv
ZGVDYWNoZTo6Z2V0R2xvCiB7CiAgICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5
KHNvdXJjZSwgU3RyaW5nKCksIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29k
ZVR5cGUsIHN0cmljdG5lc3MpOwogICAgIENvZGVDYWNoZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fc291cmNlQ29kZS5hZGQoa2V5LCBTb3VyY2VDb2RlVmFsdWUoKSk7Ci0gICAgYm9vbCBj
YW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9mZiAmJiBwcm9maWxlck1vZGUgPT0g
UHJvZmlsZXJPZmY7CisgICAgYm9vbCBjYW5DYWNoZSA9IGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dl
ck9mZiAmJiBwcm9maWxlck1vZGUgPT0gUHJvZmlsZXJPZmYgJiYgIXZtLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBj
YW5DYWNoZSkgewogICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJs
b2NrID0ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+KGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHNvdXJjZS5m
aXJzdExpbmUoKSArIHVubGlua2VkQ29kZUJsb2NrLT5maXJzdExpbmUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkVy
cm9ySGFuZGxpbmdTY29wZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRl
ICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKSVQuaCIKQEAgLTYzNiw0ICs2MzcsMTMgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3RvX2luZGV4X3N0cmluZwogICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmcoKSkpOwogfQogCitT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkp
Cit7CisgICAgQkVHSU4oKTsKKyAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbMl0udS5s
b2NhdGlvbjsKKyAgICBKU1ZhbHVlIHZhbCA9IE9QX0MoMSkuanNWYWx1ZSgpOworICAgIHZtLmhp
Z2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxv
Y2F0aW9uKTsKKyAgICBFTkQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsNyBAQCBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hG
aWRlbGl0eUxvZy5jcHAJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDQ5ICs0
Myw0NyBAQCB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6aW5pdGlhbGl6ZUhpZ2hGaWRlCiAgICAgQVNT
RVJUKCFtX2xvZ1N0YXJ0UHRyKTsKICAgICBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUgPSA1MDAwMDsK
ICAgICBtX2xvZ1N0YXJ0UHRyID0gbmV3IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07
Ci0gICAgbV9uZXh0QnVmZmVyID0gbmV3IExvZ0VudHJ5W21faGlnaEZpZGVsaXR5TG9nU2l6ZV07
Ci0gICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1f
bG9nU3RhcnRQdHI7CisgICAgbV9sb2dFbmRQdHIgPSBtX2xvZ1N0YXJ0UHRyICsgbV9oaWdoRmlk
ZWxpdHlMb2dTaXplOwogfQogCiBIaWdoRmlkZWxpdHlMb2c6On5IaWdoRmlkZWxpdHlMb2coKQog
ewogICAgIGRlbGV0ZVtdIG1fbG9nU3RhcnRQdHI7Ci0gICAgZGVsZXRlW10gbV9uZXh0QnVmZmVy
OwogfQogCiB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJp
bmcgcmVhc29uKQogewotICAgIGlmICghbV9jdXJyZW50T2Zmc2V0KQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUHJvY2VzcyBjYWxsZXI6JyIs
IHJlYXNvbiwiJyIpOwogCiAgICAgZG91YmxlIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKICAg
ICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJl
SUQsIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IGkgPSAw
OwotICAgIHdoaWxlIChpIDwgbV9jdXJyZW50T2Zmc2V0KSB7CisgICAgd2hpbGUgKGVudHJ5ICE9
IG1fY3VycmVudExvZ0VudHJ5UHRyKSB7CiAgICAgICAgIFN0cnVjdHVyZUlEIGlkID0gZW50cnkt
PnN0cnVjdHVyZUlEOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlOyAKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVudHJ5LT52YWx1ZTsKICAgICAgICAgaWYgKGlkKSB7CiAg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSBzZWVuU2hhcGVzLmZpbmQoaWQpOwogICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gc2VlblNoYXBlcy5lbmQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlID0g
SGVhcDo6aGVhcChlbnRyeS0+dmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KGVudHJ5LT5zdHJ1Y3R1cmVJRCktPnRvU3RydWN0dXJlU2hhcGUoZW50cnktPnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBzaGFwZSA9IEhlYXA6OmhlYXAodmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KGVudHJ5LT5zdHJ1Y3R1cmVJRCktPnRvU3RydWN0dXJlU2hhcGUodmFs
dWUpOwogICAgICAgICAgICAgICAgIHNlZW5TaGFwZXMuc2V0KGlkLCBzaGFwZSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgCisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzaGFwZSA9
IGl0ZXItPnZhbHVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVudHJ5LT5sb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0KQotICAgICAgICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2dsb2JhbFR5
cGVTZXQtPmFkZFR5cGVGb3JWYWx1ZShlbnRyeS0+dmFsdWUsIHNoYXBlLCBpZCk7Ci0gICAgICAg
IGVudHJ5LT5sb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFkZFR5cGVGb3JWYWx1ZShl
bnRyeS0+dmFsdWUsIHNoYXBlLCBpZCk7CisgICAgICAgIFJ1bnRpbWVUeXBlIHR5cGUgPSBUeXBl
U2V0OjpnZXRSdW50aW1lVHlwZUZvclZhbHVlKHZhbHVlKTsKKyAgICAgICAgVHlwZUxvY2F0aW9u
KiBsb2NhdGlvbiA9IGVudHJ5LT5sb2NhdGlvbjsKKyAgICAgICAgbG9jYXRpb24tPm1fbGFzdFNl
ZW5UeXBlID0gdHlwZTsKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQpCisg
ICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hZGRUeXBlSW5mb3JtYXRpb24o
dHlwZSwgc2hhcGUsIGlkKTsKKyAgICAgICAgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0
LT5hZGRUeXBlSW5mb3JtYXRpb24odHlwZSwgc2hhcGUsIGlkKTsKIAogICAgICAgICBlbnRyeSsr
OwotICAgICAgICBpKys7CiAgICAgfQogCi0gICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBt
X2N1cnJlbnRMb2dFbnRyeVB0ciA9IG1fbG9nU3RhcnRQdHI7CiAKICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAkocmV2aXNpb24g
MTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZTsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbjsgCiAgICAgICAgIFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlEOworCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0
dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9nRW50cnksIHN0cnVjdHVy
ZUlEKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZhbHVlT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCB2YWx1ZSk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBsb2NhdGlvbk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2dFbnRyeSwg
bG9jYXRpb24pOyB9CiAgICAgfTsKIAorCiAgICAgSGlnaEZpZGVsaXR5TG9nKCkKICAgICAgICAg
OiBtX2xvZ1N0YXJ0UHRyKDApCiAgICAgewpAQCAtNTksMzcgKzY0LDI5IEBAIHB1YmxpYzoKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24oSlNW
YWx1ZSB2YWx1ZSwgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2xvZ1N0YXJ0UHRyKTsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudE9mZnNldCA8IG1faGln
aEZpZGVsaXR5TG9nU2l6ZSk7Ci0gICAgCi0gICAgICAgIExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9n
U3RhcnRQdHIgKyBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgCi0gICAgICAgIGVudHJ5LT5sb2NhdGlv
biA9IGxvY2F0aW9uOwotICAgICAgICBlbnRyeS0+dmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgZW50
cnktPnN0cnVjdHVyZUlEID0gKHZhbHVlLmlzQ2VsbCgpID8gdmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZUlEKCkgOiAwKTsKKworICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+bG9jYXRpb24g
PSBsb2NhdGlvbjsKKyAgICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHItPnZhbHVlID0gdmFsdWU7
CisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT5zdHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0Nl
bGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpIDogMCk7CiAgICAgCi0gICAgICAg
IG1fY3VycmVudE9mZnNldCArPSAxOwotICAgICAgICBpZiAobV9jdXJyZW50T2Zmc2V0ID09IG1f
aGlnaEZpZGVsaXR5TG9nU2l6ZSkKKyAgICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgKz0gMTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudExvZ0VudHJ5UHRyID09IG1fbG9nRW5kUHRy
KSkKICAgICAgICAgICAgIHByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIkxvZyBGdWxsIik7CiAgICAg
fQogCiAgICAgdm9pZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyk7CisgICAgTG9nRW50
cnkqIGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CisKKyAgICBzdGF0
aWMgcHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhp
Z2hGaWRlbGl0eUxvZywgbV9sb2dTdGFydFB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGN1
cnJlbnRMb2dFbnRyeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIaWdoRmlkZWxp
dHlMb2csIG1fY3VycmVudExvZ0VudHJ5UHRyKTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgaW5p
dGlhbGl6ZUhpZ2hGaWRlbGl0eUxvZygpOwogCiAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxpdHlM
b2dTaXplOwotICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7CiAgICAgTG9nRW50cnkqIG1fbG9n
U3RhcnRQdHI7Ci0gICAgTG9nRW50cnkqIG1fbmV4dEJ1ZmZlcjsKLQotICAgIEJ5dGVTcGluTG9j
ayBtX2xvY2s7Ci0KLSAgICBzdHJ1Y3QgVGhyZWFkRGF0YSB7Ci0gICAgICAgIHB1YmxpYzoKLSAg
ICAgICAgTG9nRW50cnkqIG1fcHJvY2Vzc0xvZ1B0cjsKLSAgICAgICAgc2l6ZV90IG1fcHJvY2Nl
c3NMb2dUb09mZnNldDsKLSAgICAgICAgQnl0ZVNwaW5Mb2NrZXIqIG1fbG9ja2VyOwotICAgIH07
CisgICAgTG9nRW50cnkqIG1fY3VycmVudExvZ0VudHJ5UHRyOworICAgIExvZ0VudHJ5KiBtX2xv
Z0VuZFB0cjsKIH07CiAKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5j
cHAJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDcg
QEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2Nh
dGlvbikKIHsKLSAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVu
dCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybgotICAgICAgICA6
IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVu
dCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JUaGlzU3RhdGVtZW50Ci0gICAgICAgIDog
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDsKKyAgICBUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09
IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JGdW5jdGlvblJldHVybiA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CiAK
ICAgICBkYXRhTG9nRigiW1N0YXJ0LCBFbmRdOjpbJXUsICV1XVxuIiwgbG9jYXRpb24tPm1fZGl2
b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOwogCkBAIC00Niw5ICs0NCw3IEBAIHZvaWQg
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0YKICAgICBlbHNlCiAgICAgICAgIGRh
dGFMb2coIlx0XHRbRW50cnkgSVMgTk9UIGluIHN5c3RlbV1cbiIpOwogCi0gICAgZGF0YUxvZygi
XHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJu
U3RhdGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50XSIKLSAgICAgICAgOiBsb2NhdGlvbi0+bV9n
bG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAiW1RoaXMgU3Rh
dGVtZW50XSIKLSAgICAgICAgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CisgICAgZGF0
YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5
UmV0dXJuU3RhdGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50XSIgOiAiW05vcm1hbCBTdGF0ZW1l
bnRdIiwgIlxuIik7CiAKICAgICBkYXRhTG9nKCJcdFx0I0xvY2FsI1xuXHRcdCIsIGxvY2F0aW9u
LT5tX2luc3RydWN0aW9uVHlwZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0
IiksICJcbiIpOwogICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQpAQCAtOTEsMTAg
Kzg3LDcgQEAgc3RhdGljIGJvb2wgZGVzY3JpcHRvck1hdGNoZXNUeXBlTG9jYXRpbwogICAgIGlm
IChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVy
biAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudCkgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChkZXNjcmlwdG9yID09
IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JUaGlzU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5t
X2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3JOb3JtYWwgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdo
RmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAh
PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50KSAgCisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJp
YWJsZUlEICE9IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCkgIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCShyZXZpc2lv
biAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIHsKICAgICBUeXBlUHJv
ZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsID0gMSwKLSAgICBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yVGhpc1N0YXRlbWVudCA9IDIsCi0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvckZ1bmN0aW9uUmV0dXJuID0gMworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JG
dW5jdGlvblJldHVybiA9IDIKIH07CiAKIGNsYXNzIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
CShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMSArMTAzLDYgQEAgU3ltYm9sVGFi
bGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICAsIG1fY2FwdHVyZUVuZCgwKQogICAgICwgbV9m
dW5jdGlvbkVudGVyZWRPbmNlKENsZWFyV2F0Y2hwb2ludCkKIHsKLSAgICBpZiAodm0uaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBtX3VuaXF1ZUlETWFwID0g
c3RkOjptYWtlX3VuaXF1ZTxVbmlxdWVJRE1hcD4oKTsKLSAgICAgICAgbV9yZWdpc3RlclRvVmFy
aWFibGVNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4oKTsKLSAg
ICAgICAgbV91bmlxdWVUeXBlU2V0TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxVbmlxdWVUeXBlU2V0
TWFwPigpOwotICAgIH0KIH0KIAogU3ltYm9sVGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQpAQCAt
MTY0LDcwICsxNTksMTA0IEBAIFN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZTo6Y2xvbmVDYXB0dXJl
ZE4KICAgICAgICAgICAgIHJlc3VsdC0+bV9zbG93QXJndW1lbnRzW2ldID0gbV9zbG93QXJndW1l
bnRzW2ldOwogICAgIH0KIAotICAgIGlmIChtX3VuaXF1ZUlETWFwICYmIHJlc3VsdC0+bV91bmlx
dWVJRE1hcCkgeworICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkgeworICAgICAgICBy
ZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUHJv
ZmlsaW5nUmFyZURhdGE+KCk7CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyID0g
bV91bmlxdWVJRE1hcC0+YmVnaW4oKTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlxdWVJ
RE1hcC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJl
RGF0YS0+bV91bmlxdWVJRE1hcC5iZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5lbmQoKTsKICAgICAgICAgICAgIGZv
ciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV91bmlx
dWVJRE1hcC0+c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJl
c3VsdC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGl0ZXItPmtl
eSwgaXRlci0+dmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAgICAgICAgICAgYXV0
byBpdGVyID0gbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBh
dXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1
dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cC5iZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0
YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICByZXN1bHQtPm1fcmVnaXN0ZXJUb1Zh
cmlhYmxlTWFwLT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAu
c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgewotICAg
ICAgICAgICAgYXV0byBpdGVyID0gbV91bmlxdWVUeXBlU2V0TWFwLT5iZWdpbigpOwotICAgICAg
ICAgICAgYXV0byBlbmQgPSBtX3VuaXF1ZVR5cGVTZXRNYXAtPmVuZCgpOworICAgICAgICAgICAg
YXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5i
ZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+
bV91bmlxdWVUeXBlU2V0TWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5tX3VuaXF1ZVR5cGVTZXRNYXAtPnNl
dChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPm1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuc2V0KGl0ZXItPmtleSwgaXRl
ci0+dmFsdWUpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAordm9pZCBTeW1ib2xUYWJsZTo6cHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCit7CisgICAgaWYgKG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOworCisgICAgZm9y
IChhdXRvIGl0ZXIgPSBtX21hcC5iZWdpbigpLCBlbmQgPSBtX21hcC5lbmQoKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgeworICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJ
RE1hcC5zZXQoaXRlci0+a2V5LCBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7
CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cC5zZXQoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSwgaXRlci0+a2V5KTsKKyAgICB9Cit9CisKIEds
b2JhbFZhcmlhYmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQogewotICAgIGF1dG8g
aXRlciA9IG1fdW5pcXVlSURNYXAtPmZpbmQoa2V5KTsKLSAgICBhdXRvIGVuZCA9IG1fdW5pcXVl
SURNYXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBpdGVy
ID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZmluZChrZXkpOworICAg
IGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZW5kKCk7
CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gSGlnaEZpZGVsaXR5Tm9HbG9i
YWxJREV4aXN0czsKIAotICAgIEdsb2JhbFZhcmlhYmxlSUQmIGlkID0gaXRlci0+dmFsdWU7Cisg
ICAgR2xvYmFsVmFyaWFibGVJRCBpZCA9IGl0ZXItPnZhbHVlOwogICAgIGlmIChpZCA9PSBIaWdo
RmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbikgewogICAgICAgICBpZCA9IHZtLmdldE5l
eHRVbmlxdWVWYXJpYWJsZUlEKCk7Ci0gICAgICAgIG1fdW5pcXVlVHlwZVNldE1hcC0+c2V0KGtl
eSwgVHlwZVNldDo6Y3JlYXRlKCkpOyAvL21ha2UgYSBuZXcgZ2xvYmFsIHR5cGVzZXQgZm9yIHRo
ZSBJRAorICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVJRE1hcC5zZXQo
a2V5LCBpZCk7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVT
ZXRNYXAuc2V0KGtleSwgVHlwZVNldDo6Y3JlYXRlKCkpOyAvLyBNYWtlIGEgbmV3IGdsb2JhbCB0
eXBlc2V0IGZvciB0aGlzIGNvcnJlc3BvbmRpbmcgSUQuCiAgICAgfQotICAgICAgICAgCisKICAg
ICByZXR1cm4gaWQ7CiB9CiAKIEdsb2JhbFZhcmlhYmxlSUQgU3ltYm9sVGFibGU6OnVuaXF1ZUlE
Rm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0
ZXJJbmRleCwgVk0mIHZtKQogewotICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxl
TWFwLT5maW5kKHJlZ2lzdGVySW5kZXgpOwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3RlclRvVmFy
aWFibGVNYXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVuZCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAgYXV0byBp
dGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZp
bmQocmVnaXN0ZXJJbmRleCk7CisgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0
YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQor
ICAgICAgICByZXR1cm4gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKwogICAgIHJldHVy
biB1bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaXRlci0+dmFsdWUuZ2V0KCksIHZtKTsKIH0K
IAogUmVmUHRyPFR5cGVTZXQ+IFN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0m
IHZtKQogewotICAgIHVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCByZWdpc3RlckluZGV4LCB2
bSk7IC8vZW5zdXJlIGl0J3MgY3JlYXRlZAotICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1Zh
cmlhYmxlTWFwLT5maW5kKHJlZ2lzdGVySW5kZXgpOwotICAgIGF1dG8gZW5kID0gbV9yZWdpc3Rl
clRvVmFyaWFibGVNYXAtPmVuZCgpOwotICAgIEFTU0VSVF9VTlVTRUQoZW5kLCBpdGVyICE9IGVu
ZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpOworCisgICAg
dW5pcXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHJlZ2lzdGVySW5kZXgsIHZtKTsgLy8gTGF6aWx5
IGNyZWF0ZSB0aGUgVHlwZVNldCBpZiBuZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZmluZChyZWdpc3Rl
ckluZGV4KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lz
dGVyVG9WYXJpYWJsZU1hcC5lbmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCiAgICAgcmV0dXJuIGdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2Nr
ZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xU
YWJsZTo6Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgU3RyaW5nSW1wbCoga2V5LCBWTSYgdm0pCiB7Ci0gICAgdW5pcXVlSURGb3JWYXJp
YWJsZShsb2NrZXIsIGtleSwgdm0pOwotICAgIHJldHVybiBtX3VuaXF1ZVR5cGVTZXRNYXAtPmZp
bmQoa2V5KS0+dmFsdWU7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlUHJvZmlsaW5nUmFyZURh
dGEpOworCisgICAgdW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGtleSwgdm0pOyAvLyBMYXpp
bHkgY3JlYXRlIHRoZSBUeXBlU2V0IGlmIG5lY2Vzc2FyeS4KKworICAgIGF1dG8gaXRlciA9IG1f
dHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuZmluZChrZXkpOworICAg
IGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5l
bmQoKTsKKyAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTcy
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDE3LDEyICs0MTcsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpB
ZGRSZXN1bHQgYWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXks
IGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5p
cXVlSURNYXApIHsKLSAgICAgICAgICAgIC8vIFVzZSBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3
ZSBuZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgSUQuIEJlY2F1c2UgVk0gaXMgaW4gY2hhcmdlIG9m
IGNyZWF0aW5nIHVuaXF1ZUlEcywgCi0gICAgICAgICAgICAvLyB3aGVuIHVuaXF1ZUlEKCkgaXMg
Y2FsbGVkLCB3ZSBjaGVjayB0aGlzIGZsYWcgdG8gc2VlIGlmIHVuaXF1ZUlEIGNyZWF0aW9uIGlz
IG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIG1fdW5pcXVlSURNYXAtPnNldChrZXksIEhpZ2hGaWRl
bGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKTsgCi0gICAgICAgICAgICBtX3JlZ2lzdGVyVG9W
YXJpYWJsZU1hcC0+c2V0KGVudHJ5LmdldEluZGV4KCksIGtleSk7Ci0gICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1fbWFwLmFkZChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00MzQsMTAg
KzQyOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkpCiAgICAgewotICAgICAgICBpZiAobV91bmlxdWVJRE1hcCkgewotICAgICAgICAg
ICAgbV91bmlxdWVJRE1hcC0+c2V0KGtleSwgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVy
YXRpb24pOyAKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5zZXQoZW50cnku
Z2V0SW5kZXgoKSwga2V5KTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtl
eSwgZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQ4OSw2ICs0NzksOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgU3ltYm9sVGFibGUqIGNsb25lQ2FwdHVyZWROYW1lcyhWTSYpOwogCisgICAgdm9pZCBw
cmVwYXJlRm9ySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJik7CisKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpAQCAtNTEzLDkgKzUwNSwxMiBAQCBw
cml2YXRlOgogICAgIH5TeW1ib2xUYWJsZSgpOwogCiAgICAgTWFwIG1fbWFwOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxVbmlxdWVJRE1hcD4gbV91bmlxdWVJRE1hcDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVnaXN0ZXJUb1ZhcmlhYmxlTWFwPiBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8VW5pcXVlVHlwZVNldE1hcD4gbV91bmlxdWVUeXBlU2V0TWFwOworICAg
IHN0cnVjdCBUeXBlUHJvZmlsaW5nUmFyZURhdGEgeworICAgICAgICBVbmlxdWVJRE1hcCBtX3Vu
aXF1ZUlETWFwOworICAgICAgICBSZWdpc3RlclRvVmFyaWFibGVNYXAgbV9yZWdpc3RlclRvVmFy
aWFibGVNYXA7CisgICAgICAgIFVuaXF1ZVR5cGVTZXRNYXAgbV91bmlxdWVUeXBlU2V0TWFwOwor
ICAgIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4gbV90eXBl
UHJvZmlsaW5nUmFyZURhdGE7CiAKICAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXM7CiAgICAgYm9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miwx
NyArNjIsMTYgQEAgUnVudGltZVR5cGUgVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAg
IGVsc2UgaWYgKHYuaXNPYmplY3QoKSkKICAgICAgICAgcmV0ID0gVHlwZU9iamVjdDsKICAgICBl
bHNlCi0gICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldCA9IFR5cGVOb3RoaW5nOwogCiAgICAg
cmV0dXJuIHJldDsKIH0KIAotdm9pZCBUeXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSwgU3RydWN0dXJlSUQgaWQpIAordm9p
ZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKIHsKLSAgICBSdW50aW1l
VHlwZSB0ID0gZ2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2KTsKLSAgICBtX3NlZW5UeXBlcyA9IG1f
c2VlblR5cGVzIHwgdDsKKyAgICBtX3NlZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdHlwZTsKIAot
ICAgIGlmIChpZCAmJiBzaGFwZSAmJiAhdi5pc1N0cmluZygpICYmICF2LmlzRnVuY3Rpb24oKSkg
eworICAgIGlmIChpZCAmJiBzaGFwZSAmJiB0eXBlICE9IFR5cGVTdHJpbmcpIHsKICAgICAgICAg
QVNTRVJUKG1fc3RydWN0dXJlSURIaXN0b3J5LmlzVmFsaWRLZXkoaWQpKTsKICAgICAgICAgYXV0
byBpdGVyID0gbV9zdHJ1Y3R1cmVJREhpc3RvcnkuZmluZChpZCk7CiAgICAgICAgIGlmIChpdGVy
ID09IG1fc3RydWN0dXJlSURIaXN0b3J5LmVuZCgpKSB7CkBAIC0yMTgsOCArMjE3LDYgQEAgU3Ry
aW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gVHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVz
KCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPj4gc2VlbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwotICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVGdW5jdGlvbikKLSAgICAgICAgIHNlZW4t
PmFkZEl0ZW0oIkZ1bmN0aW9uIik7CiAgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVVuZGVmaW5l
ZCkKICAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIlVuZGVmaW5lZCIpOwogICAgIGlmIChtX3NlZW5U
eXBlcyAmIFR5cGVOdWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuaAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIGNsYXNzIFR5cGVTZXQg
OiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlU2UKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUeXBlU2V0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVHlwZVNldCk7IH0KICAg
ICBUeXBlU2V0KCk7Ci0gICAgdm9pZCBhZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQYXNzUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOworICAgIHZvaWQgYWRkVHlwZUluZm9y
bWF0aW9uKFJ1bnRpbWVUeXBlLCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJl
SUQpOwogICAgIHN0YXRpYyBSdW50aW1lVHlwZSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKEpTVmFs
dWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKICAg
ICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw3IEBAIFZNOjpWTShW
TVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fZW5hYmxlZFByb2ZpbGVy
KG51bGxwdHIpCiAgICAgLCBtX2J1aWx0aW5FeGVjdXRhYmxlcyhCdWlsdGluRXhlY3V0YWJsZXM6
OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX25leHRVbmlxdWVWYXJpYWJsZUlEKDEpCisgICAgLCBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQoMCkKIHsKICAgICBpbnRlcnBy
ZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7CiAgICAgU3RhY2tCb3VuZHMgc3RhY2sgPSB3
dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKQEAgLTI4MywxMSArMjg0LDggQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIC8vIHdvbid0IHVzZSB0aGlzLgogICAg
IG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoKSk7CiAKLSAgICAvLyBGSVhNRTogY29uZGl0aW9uYWxseSBhbGxvY2F0ZSB0aGlz
IHN0dWZmIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnNwZWN0b3IgaXMgcnVubmluZyBP
UiB0aGlzIGZsYWcgaXMgZW5hYmxlZCAobm90IGp1c3QgaWYgdGhlIGZsYWcgaXMgZW5hYmxlZCku
Ci0gICAgaWYgKE9wdGlvbnM6OnByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyPigpOwotICAgICAgICBtX2hpZ2hGaWRlbGl0eUxvZyA9IHN0ZDo6
bWFrZV91bmlxdWU8SGlnaEZpZGVsaXR5TG9nPigpOwotICAgIH0KKyAgICBpZiAoT3B0aW9uczo6
cHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICBlbmFibGVIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nKCk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtODU4LDYgKzg1NiwzNCBAQCB2
b2lkIFZNOjpzZXRFbmFibGVkUHJvZmlsZXIoTGVnYWN5UHJvZmlsCiAgICAgfQogfQogCitib29s
IFZNOjplbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCkKK3sKKyAgICBib29sIG5lZWRz
VG9SZWNvbXBpbGUgPSBmYWxzZTsKKyAgICBpZiAoIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0VuYWJsZWRDb3VudCkgeworICAgICAgICBuZWVkc1RvUmVjb21waWxlID0gdHJ1ZTsKKyAgICAg
ICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcj4oKTsKKyAgICAgICAgbV9oaWdoRmlkZWxpdHlMb2cgPSBzdGQ6Om1h
a2VfdW5pcXVlPEhpZ2hGaWRlbGl0eUxvZz4oKTsKKyAgICB9CisgICAgbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nRW5hYmxlZENvdW50Kys7CisKKyAgICByZXR1cm4gbmVlZHNUb1JlY29tcGls
ZTsKK30KKworYm9vbCBWTTo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRDb3Vu
dCA+IDApOworCisgICAgYm9vbCBuZWVkc1RvUmVjb21waWxlID0gZmFsc2U7CisgICAgbV9oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50LS07CisgICAgaWYgKCFtX2hpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQpIHsKKyAgICAgICAgbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIucmVzZXQobnVsbHB0cik7CisgICAgICAgIG1faGlnaEZpZGVsaXR5TG9nLnJl
c2V0KG51bGxwdHIpOworICAgICAgICBuZWVkc1RvUmVjb21waWxlID0gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmVlZHNUb1JlY29tcGlsZTsKK30KKwogdm9pZCBWTTo6ZHVtcEhpZ2hGaWRl
bGl0eVByb2ZpbGluZ1R5cGVzKCkKIHsKICAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE3MjQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5Niw2ICs0OTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQnVpbHRp
bkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1aWx0aW5FeGVj
dXRhYmxlcy5nZXQoKTsgfQogCiAgICAgICAgIGJvb2wgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdo
RmlkZWxpdHkoKSB7IHJldHVybiAhIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOyB9CisgICAg
ICAgIGJvb2wgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworICAgICAgICBib29s
IGRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CiAgICAgICAgIEhpZ2hGaWRlbGl0
eUxvZyogaGlnaEZpZGVsaXR5TG9nKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlMb2cuZ2V0KCk7
IH0KICAgICAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBoaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIoKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5nZXQoKTsgfQogICAg
ICAgICBUeXBlTG9jYXRpb24qIG5leHRMb2NhdGlvbigpIHsgcmV0dXJuIG1fbG9jYXRpb25JbmZv
LmFkZCgpOyB9IC8vVE9ETzogcG9zc2libGUgb3B0bWl6YXRpb246IHdoZW4gY29kZWJsb2NrcyBk
aWUsIHJlcG9ydCB3aGljaCBsb2NhdGlvbnMgYXJlIG5vIGxvbmdlciBiZWluZyBjaGFuZ2VkIHNv
IHdlIGRvbid0IHdhbGsgb3ZlciB0aGVtCkBAIC01NTMsNiArNTU1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+IG1f
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaEZp
ZGVsaXR5TG9nPiBtX2hpZ2hGaWRlbGl0eUxvZzsKICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBt
X25leHRVbmlxdWVWYXJpYWJsZUlEOworICAgICAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFbmFibGVkQ291bnQ7CiAgICAgICAgIEJhZzxUeXBlTG9jYXRpb24+IG1fbG9j
YXRpb25JbmZvOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjQyMikKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE0LTA4LTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZVJ1
bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUnVudGltZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlclJ1
bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW50aW1lQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKwogMjAxNC0wOC0xMSAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSA8dmlkZW8+IGVsZW1lbnQgcmVx
dWVzdHMgYXJlIG1pc3Npbmcgc2Vzc2lvbiBjb29raWVzOyBzb21ldGltZXMgcGVyc2lzdGFudCBj
b29raWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFn
ZW50LmNwcAkocmV2aXNpb24gMTcyNDIxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Bh
Z2VSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMyArNjcsMTUgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZAogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5k
RGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlz
Y29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxs
cHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIFN0cmluZyBlcnJv
clN0cmluZzsKICAgICBkaXNhYmxlKCZlcnJvclN0cmluZyk7CisKKyAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIHZv
aWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3Bw
CShyZXZpc2lvbiAxNzI0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVu
dGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTEgQEAgdm9pZCBXb3Jr
ZXJSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZQogICAgIG1fYmFja2VuZERpc3BhdGNoZXIg
PSBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0
Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgV29ya2VyUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKQordm9pZCBXb3JrZXJS
dW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nv
bm5lY3RSZWFzb24gcmVhc29uKQogewogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsK
KworICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQocmVhc29uKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFnZW50Ojppbmpl
Y3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236487</attachid>
            <date>2014-08-12 17:27:02 -0700</date>
            <delta_ts>2014-08-13 21:29:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>upload-patch.diff</filename>
            <type>text/plain</type>
            <size>97780</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBA
QAorMjAxNC0wOC0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRp
c2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZXJnZWQgb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBhbmQgb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlIGludG8KKyAgICAgICAgICBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBieSBhZGRpbmcgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBvcGNvZGUuCisgICAg
ICAgIC0gQWx0ZXJlZCBTeW1ib2xUYWJsZSB0byB1c2UgbGVzcyBtZW1vcnkgYnkgYWRkaW5nIGEg
cmFyZSBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgdHlwZSBwcm9maWxpbmcuCisgICAg
ICAgIC0gQ3JlYXRlZCBhbiBpbnRlcmZhY2UgdG8gdHVybiBvbiBhbmQgb2ZmIHR5cGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYgorICAgICAgICAgIEluc3BlY3Rvci4KKyAgICAgICAgLSBSZWZhY3Rv
cmVkIGhvdyBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIEhpZ2hGaWRlbGl0eUxvZyB0byBtYWtlIGl0
CisgICAgICAgICAgZWFzaWVyIHRvIGlubGluZSB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LgorICAgICAgICAtIEltcGxlbWVudGVkIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICBieSBpbmxpbmluZyB0aGUgcHJvY2Vz
cyBvZiB3cml0aW5nIHRvIHRoZSBsb2cgYW5kIGRvaW5nIGEgc21hbGwgYW1vdW50CisgICAgICAg
ICAgb2YgdHlwZSBpbmZlcmVuY2Ugb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2NvcGVEZXBlbmRlbnRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uOjpUeXBlTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNj
b3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5v
ZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJl
Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0
b3JSdW50aW1lQWdlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
cmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmFibGVkU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRGcm9tU2NvcGVDb21tb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMTElu
dDo6cHV0VG9TY29wZUNvbW1vbik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0
R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjppbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxp
dHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hG
aWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdo
RmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dFbmRQdHIpOgorICAgICAgICAoSlNDOjpIaWdoRmlk
ZWxpdHlMb2c6OmxvZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
Ojpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRj
aGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6
Y2xvbmVDYXB0dXJlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnByZXBhcmVG
b3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnVuaXF1ZUlERm9yVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVl
SURGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0
Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZv
clZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChK
U0M6OlN5bWJvbFRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojpn
ZXRSdW50aW1lVHlwZUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUlu
Zm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVz
KToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06OmVuYWJsZUhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNC0wOC0xMiAgUGV5
dG9uIFJhbmRvbHBoICA8cHJhbmRvbHBoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdW50aW1lIHN3
aXRjaCBmb3IgbG9uZyBtb3VzZSBwcmVzcyBnZXN0dXJlLiBQYXJ0IG9mIDEzNTI1NyAtIEFkZCBs
b25nIG1vdXNlIHByZXNzIGdlc3R1cmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw5ICsxMDksNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJp
bWl0aXZlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNv
bHZlX3Njb3BlIiwgImxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9n
ZXRfZnJvbV9zY29wZSIsICJsZW5ndGgiIDogOCB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKLSAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3Ro
IiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDQgfSwKQEAgLTEyMiw3ICsxMjAsNyBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfcHJvZmlsZV93aWxsX2NhbGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfZGlkX2NhbGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2VuZCIsICJsZW5ndGgiIDogMiB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3Ro
IiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5IiwgImxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2hhc19pbmRleGVkX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA1IH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5IiwgImxlbmd0aCIg
OiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNiBA
QCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
b3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGVfd2l0aF9wcm9maWxlOgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0xMjMsNyArMTIyLDYgQEAgdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9w
dXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6
CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToK
ICAgICBjYXNlIG9wX2dldF9ieV9pZDoKQEAgLTI1MSw3ICsyNDksNiBAQCB2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6
CiAgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgIGNhc2Ugb3BfcG9w
X3Njb3BlOgogICAgIGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6
CkBAIC0zMjEsNyArMzE4LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbAogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNl
IG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcyNTA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MjMsNyArMTUyMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAg
ICAgICAgICAgICAgb3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ugb3Bf
cHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE1MzIsOCArMTUz
MSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICArK2l0OyAv
LyBTdHJ1Y3R1cmUKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7
IC8vIE9wZXJhbmQKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInB1dF90b19zY29wZSIpOwotICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBv
cF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKQotICAgICAgICAgICAgICAgICsraXQ7CiAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sIDxzdHJ1Y3R1cmU+LCAl
ZCIsCiAgICAgICAgICAgICAgICAgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAs
IGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwKICAgICAg
ICAgICAgICAgICBtb2RlQW5kVHlwZS5vcGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5k
VHlwZS5tb2RlKCkpLCByZXNvbHZlVHlwZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKQEAgLTE3
MTYsNiArMTcxMywxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KSB7CisgICAgICAgIGlmIChtX3ZtLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9ySGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAg
ICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgp
LCBzeW1ib2xUYWJsZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CiAgICAgICAgICAgICBk
aWRDbG9uZVN5bWJvbFRhYmxlID0gdHJ1ZTsKQEAgLTE5NDksMTMgKzE5NTEsMTEgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToK
ICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewotICAgICAgICAgICAgaW50IG9mZnNl
dCA9IChwY1swXS51Lm9wY29kZSA9PSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgPyAy
IDogMSk7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2Zp
bGVzW3BjW29wTGVuZ3RoIC0gb2Zmc2V0XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tvcExlbmd0aCAtIDFdLnUub3Bl
cmFuZF07CiAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAt
MSk7CiAgICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKLSAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSBvZmZzZXRdID0gcHJvZmlsZTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CiAKICAgICAg
ICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5
cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CkBAIC0xOTY5LDE2ICsxOTY5LDkgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAg
ICBpZiAocGNbMF0udS5vcGNvZGUgPT0gb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBn
ZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5k
VHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCAuLi4sIFR5cGVMb2NhdGlvbgotICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAg
ICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShv
cCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDhdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0
aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAg
Ly8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlk
ZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKQEAgLTE5OTUsMzAgKzE5ODgsNTAgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9w
LnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAgICBpZiAo
cGNbMF0udS5vcGNvZGUgPT0gb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSkgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogcHV0X3RvX3Nj
b3BlX3dpdGhfcHJvZmlsZSBzY29wZSwgaWQsIHZhbHVlLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0
cnVjdHVyZSwgT3BlcmFuZCwgVHlwZUxvY2F0aW9uKgotICAgICAgICAgICAgICAgIHNpemVfdCBp
bnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShvcCwgaWRlbnQsIGlu
c3RydWN0aW9uT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDddLnUu
bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRl
bGl0eTogeworICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWNpdG9uIGlz
OiBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSByZWdUb1Byb2ZpbGUsIFR5cGVM
b2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlwZT8KICAgICAgICAgICAgIHNp
emVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7CiAgICAgICAgICAgICB1
bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKICAgICAgICAgICAgIEdsb2JhbFZhcmlhYmxl
SUQgZ2xvYmFsVmFyaWFibGVJRDsKICAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxU
eXBlU2V0OwogICAgICAgICAgICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUt
PmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChp
bnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKLQorICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBm
bGFnID0gc3RhdGljX2Nhc3Q8UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxh
Zz4ocGNbM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IG51bGxwdHI7CisKICAgICAgICAgICAgIHN3aXRjaCAoZmxhZykgeworICAgICAgICAgICAg
Y2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGU6CisgICAgICAgICAgICBjYXNlIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlOiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihwY1s1
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFi
c3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQs
IChmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlID8gR2V0IDogUHV0KSwg
dHlwZSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBm
b3Igb3AudHlwZSBoZXJlLCBhbmQgYWxzbyBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2Fu
J3Qgc3RhdGljYWxseSBkZXRlcm1pbmUgdGhlIGdsb2JhbElECisgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTE4NAorICAgICAgICAg
ICAgICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlID0gb3AuYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcC50eXBlID09IEdsb2JhbFZhcikKKyAgICAgICAgICAgICAgICAgICAgc3lt
Ym9sVGFibGUgPSBtX2dsb2JhbE9iamVjdC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVGFibGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGVy
ZSBpcyBhIGNoYW5jZSB3ZSBtYXkgZ3JhYiBhIFN5bWJvbCBUYWJsZSB0aGF0IGhhc24ndCBiZWVu
IHByZXBhcmVkIGZvciBwcm9maWxpbmcgZnJvbSBhbiBvdXRlciBzY29wZS4KKyAgICAgICAgICAg
ICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
KGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xU
YWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwor
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5
cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGln
aEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2Jh
bElEOiB7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBtX3N5bWJvbFRhYmxlLmdldCgp
OwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJs
ZS0+dW5pcXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwg
KnZtKCkpOwotICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xv
YmFsVHlwZVNldEZvclJlZ2lzdGVyKGxvY2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAq
dm0oKSk7CisgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51
bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwgcHJvZmlsZVJlZ2lzdGVyLm9mZnNldCgpLCAqdm0o
KSk7CisgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxU
eXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCBwcm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEOiAKQEAgLTIwMjYsMTAg
KzIwMzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAg
ICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlz
dHM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25UaGlzT2JqZWN0OiB7Ci0gICAgICAgICAg
ICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQ6IHsKICAgICAgICAgICAgICAg
ICBnbG9iYWxUeXBlU2V0ID0gcmV0dXJuU3RhdGVtZW50VHlwZVNldCgpOwogICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQ7CkBAIC0y
MDQzLDcgKzIwNTIsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxU
eXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZh
cmlhYmxlSUQsIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxv
Y2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJs
ZUlELAorICAgICAgICAgICAgICAgIG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZv
dFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9v
bCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsKIApAQCAtMjUyNCw5ICsyNTM0
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAg
ICAgICAgIGFjdGl2YXRpb24uY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxl
OgogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICAgICAgICAgIGNhc2Ug
b3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOiB7CiAgICAgICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBl
ID0KICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlKGN1ckluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCk7CkBAIC0zOTM1LDM1ICszOTQzLDQgQEAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaQogfQogI2VuZGlmCiAKLVR5cGVMb2NhdGlvbiogQ29kZUJs
b2NrOjpzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9wIG9wLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0KQotewotICAgIHVuc2lnbmVkIGRpdm90
U3RhcnQsIGRpdm90RW5kOwotICAgIGJvb2wgc2hvdWxkQW5hbHl6ZSA9IG1fdW5saW5rZWRDb2Rl
LT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQo
aW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKLSAgICBHbG9iYWxWYXJp
YWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQ7Ci0gICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVT
ZXQ7Ci0KLSAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJl
LCBhbmQgYWxzbyBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBk
ZXRlcm1pbmUgdGhlIGdsb2JhbElECi0gICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVs
bHB0cjsKLSAgICBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyKSAKLSAgICAgICAgc3ltYm9sVGFi
bGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOwotICAgIGVsc2UgaWYgKG9wLnR5cGUg
PT0gR2xvYmFsVmFyKQotICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgp
LT5zeW1ib2xUYWJsZSgpOwotICAgIAotICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xU
YWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0o
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlO
b0dsb2JhbElERXhpc3RzOwotCi0gICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxv
Y2F0aW9uUGFpciA9IHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRp
b25DYWNoZSgpLT5nZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2
bSgpKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0Owot
ICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5zZWNvbmQ7Ci0KLSAgICBpZiAo
c2hvdWxkQW5hbHl6ZSAmIGlzTmV3TG9jYXRpb24pCi0gICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7Ci0KLSAgICByZXR1
cm4gbG9jYXRpb247Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTcyNTA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIwLDggKzEwMjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFk
b3B0UHRyKG5ldyBSYXJlRGF0YSk7CiAgICAgfQogCi0gICAgVHlwZUxvY2F0aW9uKiBzY29wZURl
cGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9wLCBjb25zdCBJZGVudGlmaWVyJiwgc2l6ZV90KTsKLSAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1
ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgdm9pZCByZXNldFN0dWJEdXJpbmdHQ0lu
dGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9jYXRpb24uaAkocmV2aXNpb24gMTcy
NTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywyMiArMzMsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBlbnVtIEhp
Z2hGaWRlbGl0eUdsb2JhbElERmxhZ3MgewogICAgIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURH
ZW5lcmF0aW9uID0gLTEsCiAgICAgSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0cyA9IC0yLAot
ICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zLAotICAgIEhpZ2hGaWRlbGl0eVRo
aXNTdGF0ZW1lbnQgPSAtNAorICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zCiB9
OwogCiB0eXBlZGVmIGludHB0cl90IEdsb2JhbFZhcmlhYmxlSUQ7CiAKIGNsYXNzIFR5cGVMb2Nh
dGlvbiB7CiBwdWJsaWM6Ci0gICAgVHlwZUxvY2F0aW9uKCkgCi0gICAgICAgIDogbV9kaXZvdEZv
ckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQoVUlOVF9NQVgpCisgICAgVHlwZUxvY2F0
aW9uKCkKKyAgICAgICAgOiBtX2xhc3RTZWVuVHlwZShUeXBlTm90aGluZykKKyAgICAgICAgLCBt
X2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkKICAgICAg
ICAgLCBtX2luc3RydWN0aW9uVHlwZVNldChUeXBlU2V0OjpjcmVhdGUoKSkKICAgICAgICAgLCBt
X2dsb2JhbFR5cGVTZXQobnVsbHB0cikKICAgICB7CiAgICAgfQogCiAgICAgR2xvYmFsVmFyaWFi
bGVJRCBtX2dsb2JhbFZhcmlhYmxlSUQ7CisgICAgUnVudGltZVR5cGUgbV9sYXN0U2VlblR5cGU7
CiAgICAgaW50cHRyX3QgbV9zb3VyY2VJRDsKICAgICB1bnNpZ25lZCBtX2Rpdm90U3RhcnQ7CiAg
ICAgdW5zaWduZWQgbV9kaXZvdEVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAx
NzI1MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDggKzExNSwxMyBAQCBQYXJzZXJFcnJv
ciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5r
VG9GaXQoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICBpZiAo
bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT52
bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9s
b2NrKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5wcmVwYXJlRm9y
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CiAgICAgICAgIG1f
Y29kZUJsb2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2xv
bmVDYXB0dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0oKSkpOworICAgIH0KIAogICAgIGlmICht
X2V4cHJlc3Npb25Ub29EZWVwKQogICAgICAgICByZXR1cm4gUGFyc2VyRXJyb3IoUGFyc2VyRXJy
b3I6Ok91dE9mTWVtb3J5KTsKQEAgLTEwMDUsNyArMTAxMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TW92ZSgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHdh
dGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogCiAgICAgaWYgKCFkc3QtPmlzVGVtcG9y
YXJ5KCkgJiYgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhh
c0dsb2JhbElEKTsKKyAgICAgICAgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0
LCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKIAogICAgIHJldHVy
biBkc3Q7CiB9CkBAIC0xMTI0LDEyICsxMTI5LDE4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRIaWdoRmlkZWxpdHkKICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7CiB9CiAK
LXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5Qnl0ZWNvZGVGbGFnIGZsYWcpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnLCBjb25zdCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyKQogeworICAgIGlmIChmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2Rl
R2V0RnJvbVNjb3BlIHx8IGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlKQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpZGVudGlmaWVyKTsKKworICAgIC8vIFRoZSBmb3JtYXQg
b2YgdGhpcyBpbnN0cnVjaXRvbiBpczogb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxp
dHkgcmVnVG9Qcm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2
ZVR5cGU/CiAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0
eSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZ2lzdGVyVG9Qcm9maWxlLT5pbmRleCgp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRl
ciBmb3IgdGhlIFR5cGVMb2NhdGlvbiBvYmplY3QgcG9pbnRlci4KKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZsYWcpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChpZGVudGlmaWVyID8gYWRkQ29uc3RhbnQoKmlkZW50aWZpZXIpIDog
MCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29s
IGIpCkBAIC0xMjcxLDIyICsxMjgyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRGcgogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUg
cmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIFVubGlua2VkVmFsdWVQcm9maWxl
IHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9m
aWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJl
c29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRp
b24gcG9pbnRlci4KLSAgICByZXR1cm4gZHN0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9k
ZSkKIHsKICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOwpAQCAtMTMwMiwyMSArMTI5Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lz
dGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2
YWx1ZSwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGVt
aXRPcGNvZGUob3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+
aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShy
ZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2Nh
dGlvbiBwb2ludGVyLgotICAgIHJldHVybiB2YWx1ZTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
dmFsdWUsIFJlZ2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCiB7IAogICAgIGVtaXRPcGNvZGUob3Bf
aW5zdGFuY2VvZik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyMywxMiArMjIzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBU
cnlEYXRhKiB0cnlEYXRhOwogICAgIH07CiAKLSAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHlCeXRlY29kZUZsYWcgeyAKKyAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHlCeXRlY29kZUZsYWcgeworICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2Nv
cGUsCisgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlLAogICAgICAgICBQ
cm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRl
Y29kZURvZXNOb3RIYXZlR2xvYmFsSUQsCiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25Bcmd1bWVudCwKLSAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNP
YmplY3QsCi0gICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1l
bnQgIAorICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50
CiAgICAgfTsKIAogICAgIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTQxMCw3ICs0MTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdEhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYg
c3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZERpdm90KTsKLSAgICAgICAgdm9p
ZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcpOworICAgICAgICB2b2lkIGVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxl
LCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnLCBjb25zdCBJZGVudGlm
aWVyKik7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBi
b29sKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3Vi
bGUpOwpAQCAtNDc3LDkgKzQ3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSgpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3Bl
KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0R2V0RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNv
bnN0IElkZW50aWZpZXImLCBSZXNvbHZlTW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3Bl
LCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lz
dGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRU
b1Njb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBS
ZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFi
ZWw+IGVtaXRMYWJlbChMYWJlbCopOwogICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDE0
IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIHsKICAgICBpZiAo
ZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRv
ci50aGlzUmVnaXN0ZXIoKSk7CisKKyAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7Cisg
ICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXQsIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CisgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gNDsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8ocG9zaXRpb24oKSwg
SlNUZXh0UG9zaXRpb24oLTEsIHBvc2l0aW9uKCkub2Zmc2V0ICsgdGhpc0xlbmd0aCwgLTEpKTsK
KyAgICB9CisgICAgcmV0dXJuIHJldDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTE1Myw3ICsxNjAsNyBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
CiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShsb2NhbC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNHbG9i
YWxJRCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQsIG51bGxw
dHIpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24u
b2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5nZXQoKSk7
CkBAIC0xNjIsMTIgKzE2OSwxMiBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5CiAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QgPSBtX3N0YXJ0ICsgbV9pZGVudC5sZW5n
dGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBtX3N0YXJ0LCBk
aXZvdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNv
bHZlU2NvcGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBtX2lkZW50KTsKLSAgICBS
ZWdpc3RlcklEKiByZXQ7CisgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90
Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZVdpdGhQcm9m
aWxlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNjb3BlLmdldCgpLCBtX2lkZW50
LCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUdldEZyb21TY29w
ZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1RleHRQb3NpdGlvbigtMSwgbV9wb3Np
dGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkpOwotICAgIH0gZWxzZQotICAgICAg
ICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMzg3LDcgKzM5NCw3IEBAIFJlZ2lzdGVySUQqIEJy
YWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXQKICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CiAg
ICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERl
c3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2Zp
bGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC00MTMsNyAr
NDIwLDcgQEAgbm9uQXJndW1lbnRzUGF0aDoKICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UsIG1faWRlbnQpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9m
aWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNC
eXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNDk3LDcgKzUwNCw3IEBA
IFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBnZW5lcmF0b3Iu
ZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAg
ICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgp
LCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRl
Y29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNTE4LDcgKzUyNSw3IEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAgICAgLy8gbG9jYWwg
dmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMu
CiAgICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQo
KSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHJldDsKQEAgLTUzNCw3ICs1NDEsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZW1pCiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwg
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsK
ICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRl
Y29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNTUzLDcgKzU2MCw3IEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTU3MSw3ICs1NzgsNyBAQCBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0CiAgICAgZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lk
ZW50KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFs
dWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJv
ZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9m
aWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNjQ1LDcg
KzY1Miw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJh
dG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQ
cm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZS5n
ZXQoKTsKQEAgLTc1OSw3ICs3NjYsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICB9
CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1
cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVy
blZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51
bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdF
eHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1
cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC04MTQsMTEgKzgyMSwxMSBAQCBSZWdpc3RlcklEKiBQ
b3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3Bl
ID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBp
ZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRG
cm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRo
cm93SWZOb3RGb3VuZCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG9sZFZhbHVlID0gZW1pdFBv
c3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZh
bHVlLmdldCgpLCBtX29wZXJhdG9yKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2Nv
cGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAo
Z2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2
YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29k
ZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwg
aWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KIAogICAgIHJldHVy
biBvbGRWYWx1ZS5nZXQoKTsKIH0KQEAgLTg0Miw3ICs4NDksNyBAQCBSZWdpc3RlcklEKiBQb3N0
Zml4Tm9kZTo6ZW1pdEJyYWNrZXQoQnl0CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKICAgICBp
ZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgp
LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2Zp
bGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsKQEAgLTg2Niw3ICs4NzMsNyBAQCBS
ZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29kCiAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCkpOwog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewot
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5t
b3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgb2xkVmFsdWUpOwpAQCAtMTAwMiwxMSArMTAw
OSwxMSBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBpZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgZW1pdEluY09y
RGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOworICAgIGdlbmVyYXRvci5l
bWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90
Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29w
ZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9T
Y29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwor
ICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCB2YWx1ZS5nZXQoKSk7CiB9CiAKQEAgLTEwMjcsNyArMTAzNCw3IEBAIFJlZ2lzdGVySUQqIFBy
ZWZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dGUKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CkBAIC0xMDQ5LDcgKzEwNTYsNyBAQCBSZWdpc3RlcklE
KiBQcmVmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRv
ci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUpOwogICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2ZpbGVUeXBlc0J5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90
SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcHJvcERzdC5nZXQoKSk7CkBAIC0xNTIwLDEyICsxNTI3LDExIEBAIFJlZ2lzdGVySUQqIFJl
YWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIG1f
aWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0
RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIG1faWRlbnQs
IFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGVtaXRS
ZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3Bl
cmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2Ny
aXB0b3IoKSksIHRoaXMpOwotICAgIFJlZ2lzdGVySUQqIHJldDsgCisgICAgUmVnaXN0ZXJJRCog
cmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1
bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCks
IFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShyZXN1bHQuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29w
ZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxz
ZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1f
aWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJu
IHJldDsKIH0KIApAQCAtMTU1OSwxMiArMTU2NSwxMSBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjCiAgICAgICAgIGRzdCA9IDA7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKLSAgICBSZWdpc3RlcklEKiByZXQ7CisgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVy
YXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZv
dW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KCkpIHsKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUo
c2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9k
ZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmVzdWx0LmdldCgpLCBQ
cm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVt
aXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVyYXRv
ci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5k
KTsKKyAgICB9IAogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTE1NzksNyArMTU4NCw3IEBAIFJl
Z2lzdGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSgKICAgICBSZWdpc3RlcklEKiBm
b3J3YXJkUmVzdWx0ID0gKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3Vs
dCA6IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24ocmVzdWx0KSwgcmVzdWx0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFz
ZS5nZXQoKSwgbV9pZGVudCwgZm9yd2FyZFJlc3VsdCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNC
eXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBAIC0xNTk4LDcgKzE2MDMsNyBAQCBSZWdpc3Rl
cklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1
cGRhdGVkVmFsdWUpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdo
RmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkodXBkYXRlZFZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmV0OwpAQCAtMTYyNCw3ICsxNjI5LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduQnJhY2tl
dE5vZGU6OmVtaXRCeXRlYwogICAgIFJlZ2lzdGVySUQqIGZvcndhcmRSZXN1bHQgPSAoZHN0ID09
IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihyZXN1bHQpLCByZXN1
bHQpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0
KCksIGZvcndhcmRSZXN1bHQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90
SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
fQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZv
cndhcmRSZXN1bHQpOwpAQCAtMTY0NCw3ICsxNjQ5LDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlm
eUJyYWNrZXROb2RlOjplbWl0QgogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5
VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB1cGRhdGVkVmFsdWUpOwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQ
cm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KIApAQCAtMjI1MSw3ICsyMjU2LDcgQEAgdm9pZCBS
ZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZQogCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVyblJlZ2lzdGVyID0gbV92YWx1ZSA/IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1f
dmFsdWUpIDogZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5SZWdpc3Rl
ci5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5S
ZWdpc3Rlci5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVu
dCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAg
IGlmIChnZW5lcmF0b3Iuc2NvcGVEZXB0aCgpKSB7CkBAIC0yNTgyLDE3ICsyNTg3LDEzIEBAIHZv
aWQgRXZhbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmUKIHZvaWQgRnVuY3Rpb25Cb2R5
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqKQogewogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFydCgtMSwgbV9zdGFydFN0YXJ0T2Zm
c2V0LCAtMSk7IC8vIFRoaXMgZGl2b3QgaXMgYXQgdGhlIG9wZW4gYnJhY2Ugb2YgdGhlIGZ1bmN0
aW9uLgotICAgICAgICBKU1RleHRQb3NpdGlvbiBlbmQoLTEsIG1fc3RhcnRTdGFydE9mZnNldCAr
IDEsIC0xKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlv
blRoaXNPYmplY3QpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhzdGFydCwgZW5kKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3BhcmFtZXRlcnMtPnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIERlc3RydWN0dXJpbmcgYXNzaWdubWVudHMgaW50byBhcmd1bWVudHMuCiAgICAg
ICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy0+YXQoaSktPmlzQmluZGluZ05vZGUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEJpbmRpbmdOb2RlKiBwYXJhbWV0ZXIg
PSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KG1fcGFyYW1ldGVycy0+YXQoaSkpOwogICAgICAg
ICAgICAgUmVnaXN0ZXJJRCByZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7Ci0gICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoJnJlZywg
UHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50KTsKKyAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQcm9maWxlVHlwZXNC
eXRlY29kZUZ1bmN0aW9uQXJndW1lbnQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8ocGFyYW1ldGVyLT5k
aXZvdFN0YXJ0KCksIHBhcmFtZXRlci0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNjE0LDcgKzI2MTUsNyBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlCiAgICAgaWYgKCFyZXR1cm5Ob2RlKSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHIwID0gZ2Vu
ZXJhdG9yLmlzQ29uc3RydWN0b3IoKSA/IGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSA6IGdlbmVy
YXRvci5lbWl0TG9hZCgwLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKGdlbmVyYXRvci5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHIwLCBQcm9maWxlVHlwZXNCeXRlY29k
ZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsgLy8gRG8gbm90IGVtaXQgZXhwcmVzc2lvbiBpbmZv
IGZvciB0aGlzIHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNlcidzIHNvdXJjZSBj
b2RlLgorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHIwLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50LCBudWxs
cHRyKTsgLy8gRG8gbm90IGVtaXQgZXhwcmVzc2lvbiBpbmZvIGZvciB0aGlzIHByb2ZpbGUgYmVj
YXVzZSBpdCdzIG5vdCBpbiB0aGUgdXNlcidzIHNvdXJjZSBjb2RlLgogICAgICAgICBBU1NFUlQo
c3RhcnRPZmZzZXQoKSA+PSBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQo
KSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFJldHVybihyMCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JS
dW50aW1lQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MjUwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkhlYXBJdGVy
YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCkBA
IC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJTY3Jp
cHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJWTUVu
dHJ5U2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogCkBAIC02MSw2ICs2Myw3IEBAIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
SW5zcGVjdG9yUnVudGltZUEKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVk
U2NyaXB0TWFuYWdlcikKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIobnVsbHB0cikKICAgICAs
IG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZChmYWxzZSkK
IHsKIH0KIApAQCAtMTk5LDggKzIwMiwxMCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
Z2V0UnVudGltZVR5CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAg
IFZNJiB2bSA9IGdsb2JhbFZNKCk7CiAgICAgdHlwZURlc2NyaXB0aW9ucyA9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkKKyAgICBpZiAoIXZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJUaGUgVk0gZG9l
cyBub3QgY3VycmVudGx5IGhhdmUgVHlwZSBJbmZvcm1hdGlvbi4iKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIGRvdWJsZSBzdGFydCA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICB2bS5o
aWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiVXNlciBRdWVyeSIpOwpA
QCAtMjMxLDYgKzIzNiw3NyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGlt
ZVR5CiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlh
Ymxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCBlbmQgLSBzdGFydCk7CiB9CiAKK2NsYXNzIFR5
cGVSZWNvbXBpbGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJsaWM6
CisgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAg
ICBpZiAoIWNlbGwtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgICAgIGV4ZWN1dGFibGUt
PmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAgICAgIGV4ZWN1dGFibGUtPmNsZWFyVW5s
aW5rZWRDb2RlRm9yUmVjb21waWxhdGlvbklmTm90Q29tcGlsaW5nKCk7CisgICAgfQorfTsKKwor
c3RhdGljIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKFZNJiB2
bSwgYm9vbCBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKQoreworICAgIHZtLndhaXRGb3JDb21w
aWxhdGlvbnNUb0NvbXBsZXRlKCk7CisKKyAgICBib29sIG5lZWRzVG9SZWNvbXBpbGU7CisgICAg
aWYgKHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpCisgICAgICAgIG5lZWRzVG9SZWNvbXBpbGUg
PSB2bS5lbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAgZWxzZQorICAgICAg
ICBuZWVkc1RvUmVjb21waWxlID0gdm0uZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmco
KTsKKworICAgIGlmIChuZWVkc1RvUmVjb21waWxlKSB7CisgICAgICAgIFR5cGVSZWNvbXBpbGVy
IHJlY29tcGlsZXI7CisgICAgICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZSh2
bS5oZWFwKTsKKyAgICAgICAgdm0uaGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChp
dGVyYXRpb25TY29wZSwgcmVjb21waWxlcik7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29u
bmVjdFJlYXNvbiByZWFzb24pCit7CisgICAgaWYgKHJlYXNvbiA9PSBJbnNwZWN0b3JEaXNjb25u
ZWN0UmVhc29uOjpJbnNwZWN0b3JEZXN0cm95ZWQgJiYgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVk
KQorICAgICAgICBzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGZhbHNl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZUhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmcoRXJyb3JTdHJpbmcqKQoreworICAgIGlmIChtX2lzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCA9
IHRydWU7CisgICAgc2V0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRTdGF0ZSh0cnVl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikKK3sKKyAgICBpZiAoIW1faXNUeXBlUHJvZmlsaW5n
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVk
ID0gZmFsc2U7CisgICAgc2V0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRTdGF0ZShm
YWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGJvb2wgc2hvdWxkRW5hYmxlVHlwZVByb2ZpbGluZykK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOworCisgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBy
dW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCisgICAg
Ly8gdXAgdGhyb3dpbmcgYXdheSBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCisgICAg
aWYgKHZtLmVudHJ5U2NvcGUpIHsKKyAgICAgICAgdm0uZW50cnlTY29wZS0+c2V0RW50cnlTY29w
ZURpZFBvcExpc3RlbmVyKHRoaXMsCisgICAgICAgICAgICBbPV0gKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWNvbXBpbGVBbGxKU0Z1
bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpOyAK
KyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKHZtLCBzaG91bGRFbmFibGVUeXBlUHJvZmls
aW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUnVudGltZUFnZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgJKHJldmlzaW9uIDE3
MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclJ1bnRpbWUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5J
bnNwZWN0b3JSdW50aW1lQWdlbnQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxl
ZCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopIG92ZXJy
aWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6RW51bSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CkBAIC02Nyw2
ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVu
YWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoRXJyb3JTdHJp
bmcqKSBvdmVycmlkZTsKICAgICAKICAgICB2b2lkIHNldFNjcmlwdERlYnVnU2VydmVyKFNjcmlw
dERlYnVnU2VydmVyKiBzY3JpcHREZWJ1Z1NlcnZlcikgeyBtX3NjcmlwdERlYnVnU2VydmVyID0g
c2NyaXB0RGVidWdTZXJ2ZXI7IH0KIApAQCAtODQsOSArODgsMTEgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCB1bm11dGVDb25zb2xlKCkgPSAwOwogCiBwcml2YXRlOgorICAgIHZvaWQg
c2V0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRTdGF0ZShib29sKTsKICAgICBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIFNjcmlwdERl
YnVnU2VydmVyKiBtX3NjcmlwdERlYnVnU2VydmVyOwogICAgIGJvb2wgbV9lbmFibGVkOworICAg
IGJvb2wgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCShy
ZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEw
ICs0OCwxMSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjpkaWRDcmVhCiAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlz
Y29ubmVjdFJlYXNvbikKK3ZvaWQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQog
ewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLmNsZWFyKCk7CisgICAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChyZWFzb24pOwogfQogCiBWTSYgSlNHbG9iYWxPYmplY3RSdW50aW1l
QWdlbnQ6Omdsb2JhbFZNKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCShyZXZpc2lvbiAxNzI1MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkod29y
a2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSwxNCBAQAogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidHlwZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiVHlwZURlc2Ny
aXB0aW9uIiwgImRlc2NyaXB0aW9uIjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFibGUuIiB9
IH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBk
ZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGVzIGhpZ2ggZmlkZWxpdHkg
dHlwZSBwcm9maWxpbmcgb24gdGhlIFZNLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmciLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkRpc2FibGVzIGhpZ2ggZmlkZWxpdHkgdHlwZSBwcm9maWxp
bmcgb24gdGhlIFZNLiIKICAgICAgICAgfQogICAgIF0sCiAgICAgImV2ZW50cyI6IFsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBA
QCBKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpTU0UyQ2hlY2tTCiAjaW5jbHVkZSAiQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRl
ICJKSVRPcGVyYXRpb25zLmgiCkBAIC0yNjcsNiArMjY4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5jKQogICAgICAgICBERUZJ
TkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVf
d2lsbF9jYWxsKQorICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX25hbWVfc2NvcGUpCiAgICAgICAg
IERFRklORV9PUChvcF9wdXNoX3dpdGhfc2NvcGUpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X291dF9vZl9saW5lOgpAQCAtNDk4LDYgKzUwMCwxMCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbiht
X2NvZGVCbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIC8vIFRoaXMgZW5zdXJl
cyB0aGF0IHdlIGhhdmUgdGhlIG1vc3QgdXAgdG8gZGF0ZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4g
cGVyZm9ybWluZyB0eXBlY2hlY2sgb3B0aW1pemF0aW9ucyBmb3Igb3BfcHJvZmlsZV90eXBlc193
aXRoX2hpZ2hfZmlkZWxpdHkuCisgICAgaWYgKG1fdm0tPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpCisgICAgICAgIG1fdm0tPmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGln
aEZpZGVsaXR5TG9nKCJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iKTsKICAgICAKICAg
ICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IGFkb3B0UHRyKG5ldyBKSVREaXNhc3Nl
bWJsZXIobV9jb2RlQmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTI3LDYgKzUyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfaW5jKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX2Rp
ZF9jYWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX3dpbGxf
Y2FsbChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfcHJvZmlsZV90eXBlc193
aXRoX2hpZ2hfZmlkZWxpdHkoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1
c2hfbmFtZV9zY29wZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF93
aXRoX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOCw2ICsxMzA4
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnUKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dp
dGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC00MSw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTMzOCw2ICsxMzQwLDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4
X3N0cmluZyhJbnN0cnUKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CiAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKIH0KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlc193aXRo
X2hpZ2hfZmlkZWxpdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBU
eXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
LmxvY2F0aW9uOworICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7CisKKyAgICAvLyBDb21waWxl
IGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNh
biBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KKyAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBp
bmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4K
KyAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZp
bmVkKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJl
Z1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7CisgICAgfSBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKSB7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSkpOworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlw
ZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9vbGVhbikgeworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+MSksIHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChWYWx1ZUZhbHNlKSkpOworICAgIH0gZWxz
ZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTWFjaGluZUlu
dCkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdU
MCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIo
cmVnVDApKTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZU51bWJlcikgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
VG9Qcm9maWxlLCByZWdUMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoZW1pdEp1bXBJZklt
bWVkaWF0ZU51bWJlcihyZWdUMCkpOworICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9u
LT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwg
PSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOworICAgIH0KKworICAgIEhpZ2hGaWRlbGl0eUxvZyogY2FjaGVkSGlnaEZpZGVsaXR5TG9n
ID0gbV92bS0+aGlnaEZpZGVsaXR5TG9nKCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hl
ZEhpZ2hGaWRlbGl0eUxvZyksIHJlZ1QyKTsKKyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRy
eSBpbnRvIFQxLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5TG9nOjpj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QxKTsKKworICAgIC8vIFN0b3JlIHRoZSB0eXBl
TG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVk
VHlwZUxvY2F0aW9uKSwgcmVnVDApOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEs
IEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKKworICAgIC8v
IFN0b3JlIHRoZSBKU1ZhbHVlIG9uIHRoZSBsb2cgZW50cnkuCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MocmVnVDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKKwor
ICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBUMCBpcyBhIGNlbGws
IG90aGVyd2lzZSwgc3RvcmUgMCwgb24gdGhlIGxvZyBlbnRyeS4KKyAgICBKdW1wIG5vdENlbGwg
PSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKKyAgICBKdW1wIHNraXBJc0NlbGwgPSBqdW1wKCk7CisgICAgbm90Q2VsbC5saW5r
KHRoaXMpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBIaWdo
RmlkZWxpdHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgc2tpcElz
Q2VsbC5saW5rKHRoaXMpOworCisgICAgLy8gSW5jcmVtZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVu
dHJ5LgorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEhpZ2hGaWRlbGl0eUxvZzo6TG9n
RW50cnkpKSwgcmVnVDEpOworICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIEhpZ2hG
aWRlbGl0eUxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICBKdW1wIHNraXBDbGVh
ckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkSGln
aEZpZGVsaXR5TG9nLT5sb2dFbmRQdHIoKSkpOworICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2Un
cmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2xl
YXJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXJMb2cpOworICAgIHNraXBDbGVhckxvZy5saW5rKHRo
aXMpOworCisgICAganVtcFRvRW5kLmxpbmsodGhpcyk7Cit9CisKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQAogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIaWdo
RmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCIKQEAgLTE5MjEsNiArMTkyMiwxMSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VG9JbmRleFN0CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaW5kZXgpLnN0cmluZygpKTsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNs
ZWFySGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyTG9nKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBl
eGVjLT52bSgpLmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJMb2cg
RnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIGJhc2VsaW5lIEpJVCIpOworfQorCiB9IC8vIGV4dGVy
biAiQyIKIAogLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoKSBu
ZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0
LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaQogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRvclBuYW1lKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIGludDMyX3QpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
SW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiAKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25DbGVhckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNs
aSBvcGVyYXRpb25MaW5rRm9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAs
MTUgKzU0MCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgKICAg
ICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQogCi1MTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCi17
Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbMl0u
dS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVlIHZhbCA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwot
ICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlv
bih2YWwsIGxvY2F0aW9uKTsKLSAgICBMTElOVF9FTkRfSU1QTCgpOwotfQotCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY2hlY2tfaGFzX2luc3RhbmNlKQogewogICAgIExMSU5UX0JF
R0lOKCk7CkBAIC0xMzc1LDggKzEzNjYsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Jlc29sdmVfcwogICAgIExMSU5UX1JFVFVSTihKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIGV4
ZWMtPnNjb3BlKCksIGlkZW50KSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNv
bW1vbihFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgVk0mIHZtKQorTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQogeworICAgIExMSU5UX0JFR0lO
KCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0
PEpTT2JqZWN0Kj4oTExJTlRfT1AoMikuanNWYWx1ZSgpKTsKICAgICBSZXNvbHZlTW9kZUFuZFR5
cGUgbW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKQEAgLTEzODQsOCArMTM3Nyw4IEBAIHN0
YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChzY29wZSk7CiAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
LCBzbG90KSkgewogICAgICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RG
b3VuZCkKLSAgICAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBMTElOVF9SRVRVUk4oZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KSkpOworICAgICAgICBMTElOVF9SRVRVUk4oanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAg
ICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50
aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBh
dCBjb21waWxlIHRpbWUuCkBAIC0xNDAyLDI3ICsxMzk1LDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGdl
dEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBz
bG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2dldF9mcm9tX3Njb3BlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IGdldEZyb21TY29wZUNvbW1vbihleGVjLCBwYywgdm0pOwotICAgIExMSU5UX1JF
VFVSTih2YWx1ZSk7CisgICAgTExJTlRfUkVUVVJOKHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQp
KTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dp
dGhfcHJvZmlsZSkKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUp
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNjb3Bl
Q29tbW9uKGV4ZWMsIHBjLCB2bSk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzhd
LnUubG9jYXRpb247Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1h
dGlvbkZvckxvY2F0aW9uKHZhbHVlLCBsb2NhdGlvbik7Ci0gICAgTExJTlRfUkVUVVJOKHZhbHVl
KTsKLX0KIAotc3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdGF0ZSogZXhl
YywgSW5zdHJ1Y3Rpb24qIHBjKQotewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKICAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8
SlNPYmplY3QqPihMTElOVF9PUCgxKS5qc1ZhbHVlKCkpOwpAQCAtMTQzMCwzNSArMTQwOSwxMyBA
QCBzdGF0aWMgSlNPYmplY3QqIHB1dFRvU2NvcGVDb21tb24oRXhlY1N0CiAgICAgUmVzb2x2ZU1v
ZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFu
ZCk7CiAKICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAh
c2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOworICAgICAgICBMTElOVF9USFJPVyhj
cmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CiAKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgc2Nv
cGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsK
ICAgICAKICAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVj
LCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2Nv
cGUpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBwdXRUb1Nj
b3BlQ29tbW9uKGV4ZWMsIHBjKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9X
KGVycm9yKTsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi17Ci0gICAgLy8gVGhlIGZvcm1hdCBv
ZiB0aGlzIGluc3RydWN0aW9uIGlzIHRoZSBzYW1lIGFzIHB1dF90b19zY29wZSB3aXRoIGEgVHlw
ZUxvY2F0aW9uIGFwcGVuZGVkOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBpZCwg
dmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9jYXRp
b24qCi0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBwdXRUb1Njb3Bl
Q29tbW9uKGV4ZWMsIHBjKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVy
cm9yKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbN10udS5sb2NhdGlvbjsKLSAg
ICBKU1ZhbHVlIHZhbCA9IExMSU5UX09QX0MoMykuanNWYWx1ZSgpOwotICAgIHZtLmhpZ2hGaWRl
bGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9u
KTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
MTAgKzExOCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHIKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbik7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZSk7Ci1MTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJv
ZmlsZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29w
ZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZV93
aXRoX3Byb2ZpbGUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9m
aWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1l
KikgV1RGX0lOVEVSTkFMOwogI2lmICFFTkFCTEUoSklUKQogZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdU
Rl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTM4MSwxNSArMTM4MSw1IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAg
ICAgZGlzcGF0Y2goNSkKIAogX2xsaW50X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0
aF9oaWdoX2ZpZGVsaXR5KQotICAgIGRpc3BhdGNoKDQpCi0KLV9sbGludF9vcF9wdXRfdG9fc2Nv
cGVfd2l0aF9wcm9maWxlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKQotICAgIGRpc3BhdGNo
KDgpCi0KLV9sbGludF9vcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6Ci0gICAgdHJhY2VF
eGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2dldF9mcm9tX3Nj
b3BlX3dpdGhfcHJvZmlsZSkKLSAgICBkaXNwYXRjaCg5KQorICAgIGNhbGxTbG93UGF0aChfc2xv
d19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQorICAgIGRpc3BhdGNoKDYp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJl
dmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgVW5saW5rZWRDb2RlQmxvY2tU
eXBlKiBDb2RlQ2FjaGU6OmdldEdsbwogewogICAgIFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNl
Q29kZUtleShzb3VyY2UsIFN0cmluZygpLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT46OmNvZGVUeXBlLCBzdHJpY3RuZXNzKTsKICAgICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBh
ZGRSZXN1bHQgPSBtX3NvdXJjZUNvZGUuYWRkKGtleSwgU291cmNlQ29kZVZhbHVlKCkpOwotICAg
IGJvb2wgY2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJN
b2RlID09IFByb2ZpbGVyT2ZmOworICAgIGJvb2wgY2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0g
RGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT2ZmICYmICF2bS5pc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50
cnkgJiYgY2FuQ2FjaGUpIHsKICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtl
ZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBz
b3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENvZGVCbG9jay0+Zmlyc3RMaW5lKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25GdXp6LmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklULmgiCkBAIC02MzYsNCArNjM3LDEzIEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF90b19pbmRleF9zdHJpbmcKICAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBPUCgyKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsK
IH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KQoreworICAgIEJFR0lOKCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBj
WzJdLnUubG9jYXRpb247CisgICAgSlNWYWx1ZSB2YWwgPSBPUF9DKDEpLmpzVmFsdWUoKTsKKyAg
ICB2bS5oaWdoRmlkZWxpdHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24o
dmFsLCBsb2NhdGlvbik7CisgICAgRU5EKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJ
KHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfc3RydQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKIFNMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKIFNMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpOwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw0OSArNDMsNDcgQEAgdm9pZCBIaWdoRmlkZWxpdHlMb2c6OmluaXRpYWxpemVIaWdoRmlkZQog
ICAgIEFTU0VSVCghbV9sb2dTdGFydFB0cik7CiAgICAgbV9oaWdoRmlkZWxpdHlMb2dTaXplID0g
NTAwMDA7CiAgICAgbV9sb2dTdGFydFB0ciA9IG5ldyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxv
Z1NpemVdOwotICAgIG1fbmV4dEJ1ZmZlciA9IG5ldyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxv
Z1NpemVdOwotICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgbV9jdXJyZW50TG9nRW50cnlQ
dHIgPSBtX2xvZ1N0YXJ0UHRyOworICAgIG1fbG9nRW5kUHRyID0gbV9sb2dTdGFydFB0ciArIG1f
aGlnaEZpZGVsaXR5TG9nU2l6ZTsKIH0KIAogSGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5
TG9nKCkKIHsKICAgICBkZWxldGVbXSBtX2xvZ1N0YXJ0UHRyOwotICAgIGRlbGV0ZVtdIG1fbmV4
dEJ1ZmZlcjsKIH0KIAogdm9pZCBIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxpdHlM
b2coU3RyaW5nIHJlYXNvbikKIHsKLSAgICBpZiAoIW1fY3VycmVudE9mZnNldCkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIlByb2Nlc3MgY2Fs
bGVyOiciLCByZWFzb24sIiciKTsKIAogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50VGltZU1T
KCk7CiAgICAgTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsKICAgICBIYXNoTWFwPFN0
cnVjdHVyZUlELCBSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBzZWVuU2hhcGVzOwotICAgIHNpemVf
dCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG1fY3VycmVudE9mZnNldCkgeworICAgIHdoaWxlIChl
bnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cikgewogICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9
IGVudHJ5LT5zdHJ1Y3R1cmVJRDsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFw
ZTsgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlbnRyeS0+dmFsdWU7CiAgICAgICAgIGlmIChp
ZCkgewogICAgICAgICAgICAgYXV0byBpdGVyID0gc2VlblNoYXBlcy5maW5kKGlkKTsKICAgICAg
ICAgICAgIGlmIChpdGVyID09IHNlZW5TaGFwZXMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBz
aGFwZSA9IEhlYXA6OmhlYXAoZW50cnktPnZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJs
ZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50b1N0cnVjdHVyZVNoYXBlKGVudHJ5LT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpoZWFwKHZhbHVlLmFzQ2VsbCgpKS0+
c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50b1N0cnVjdHVyZVNo
YXBlKHZhbHVlKTsKICAgICAgICAgICAgICAgICBzZWVuU2hhcGVzLnNldChpZCwgc2hhcGUpOwot
ICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
c2hhcGUgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChlbnRyeS0+bG9j
YXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKLSAgICAgICAgICAgIGVudHJ5LT5sb2NhdGlvbi0+bV9n
bG9iYWxUeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUoZW50cnktPnZhbHVlLCBzaGFwZSwgaWQpOwot
ICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlRm9y
VmFsdWUoZW50cnktPnZhbHVlLCBzaGFwZSwgaWQpOworICAgICAgICBSdW50aW1lVHlwZSB0eXBl
ID0gVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSBlbnRyeS0+bG9jYXRpb247CisgICAgICAgIGxvY2F0aW9uLT5t
X2xhc3RTZWVuVHlwZSA9IHR5cGU7CisgICAgICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBl
U2V0KQorICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWRkVHlwZUluZm9y
bWF0aW9uKHR5cGUsIHNoYXBlLCBpZCk7CisgICAgICAgIGxvY2F0aW9uLT5tX2luc3RydWN0aW9u
VHlwZVNldC0+YWRkVHlwZUluZm9ybWF0aW9uKHR5cGUsIHNoYXBlLCBpZCk7CiAKICAgICAgICAg
ZW50cnkrKzsKLSAgICAgICAgaSsrOwogICAgIH0KIAotICAgIG1fY3VycmVudE9mZnNldCA9IDA7
CisgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgPSBtX2xvZ1N0YXJ0UHRyOwogCiAgICAgaWYgKHZl
cmJvc2UpIHsKICAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJl
dmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb247IAogICAg
ICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKKworICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IHN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCBz
dHJ1Y3R1cmVJRCk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2YWx1ZU9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2dFbnRyeSwgdmFsdWUpOyB9CisgICAgICAgIHN0YXRp
YyBwdHJkaWZmX3QgbG9jYXRpb25PZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9n
RW50cnksIGxvY2F0aW9uKTsgfQogICAgIH07CiAKKwogICAgIEhpZ2hGaWRlbGl0eUxvZygpCiAg
ICAgICAgIDogbV9sb2dTdGFydFB0cigwKQogICAgIHsKQEAgLTU5LDM3ICs2NCwyOSBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0
aW9uKEpTVmFsdWUgdmFsdWUsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9sb2dTdGFydFB0cik7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQg
PCBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpOwotICAgIAotICAgICAgICBMb2dFbnRyeSogZW50cnkg
PSBtX2xvZ1N0YXJ0UHRyICsgbV9jdXJyZW50T2Zmc2V0OwotICAgIAotICAgICAgICBlbnRyeS0+
bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgZW50cnktPnZhbHVlID0gdmFsdWU7Ci0gICAg
ICAgIGVudHJ5LT5zdHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpIDogMCk7CisKKyAgICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHItPmxv
Y2F0aW9uID0gbG9jYXRpb247CisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT52YWx1ZSA9
IHZhbHVlOworICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+c3RydWN0dXJlSUQgPSAodmFs
dWUuaXNDZWxsKCkgPyB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA6IDApOwogICAgIAot
ICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsKLSAgICAgICAgaWYgKG1fY3VycmVudE9mZnNl
dCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRy
ICs9IDE7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRMb2dFbnRyeVB0ciA9PSBtX2xv
Z0VuZFB0cikpCiAgICAgICAgICAgICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJMb2cgRnVsbCIp
OwogICAgIH0KIAogICAgIHZvaWQgcHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcpOworICAg
IExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQorCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihIaWdoRmlkZWxpdHlMb2csIG1fbG9nU3RhcnRQdHIpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGln
aEZpZGVsaXR5TG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KIAogcHJpdmF0ZToKICAgICB2
b2lkIGluaXRpYWxpemVIaWdoRmlkZWxpdHlMb2coKTsKIAogICAgIHVuc2lnbmVkIG1faGlnaEZp
ZGVsaXR5TG9nU2l6ZTsKLSAgICBzaXplX3QgbV9jdXJyZW50T2Zmc2V0OwogICAgIExvZ0VudHJ5
KiBtX2xvZ1N0YXJ0UHRyOwotICAgIExvZ0VudHJ5KiBtX25leHRCdWZmZXI7Ci0KLSAgICBCeXRl
U3BpbkxvY2sgbV9sb2NrOwotCi0gICAgc3RydWN0IFRocmVhZERhdGEgewotICAgICAgICBwdWJs
aWM6Ci0gICAgICAgIExvZ0VudHJ5KiBtX3Byb2Nlc3NMb2dQdHI7Ci0gICAgICAgIHNpemVfdCBt
X3Byb2NjZXNzTG9nVG9PZmZzZXQ7Ci0gICAgICAgIEJ5dGVTcGluTG9ja2VyKiBtX2xvY2tlcjsK
LSAgICB9OworICAgIExvZ0VudHJ5KiBtX2N1cnJlbnRMb2dFbnRyeVB0cjsKKyAgICBMb2dFbnRy
eSogbV9sb2dFbmRQdHI7CiB9OwogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5
ICszNSw3IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogdm9pZCBIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXI6OmxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlv
biogbG9jYXRpb24pCiB7Ci0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlw
dG9yID0gbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5T
dGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4KLSAg
ICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNT
dGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudAotICAg
ICAgICA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CisgICAgVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gOiBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9y
bWFsOwogCiAgICAgZGF0YUxvZ0YoIltTdGFydCwgRW5kXTo6WyV1LCAldV1cbiIsIGxvY2F0aW9u
LT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKIApAQCAtNDYsOSArNDQsNyBA
QCB2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGCiAgICAgZWxzZQogICAg
ICAgICBkYXRhTG9nKCJcdFx0W0VudHJ5IElTIE5PVCBpbiBzeXN0ZW1dXG4iKTsKIAotICAgIGRh
dGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0
eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iCi0gICAgICAgIDogbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gIltU
aGlzIFN0YXRlbWVudF0iCi0gICAgICAgIDogIltOb3JtYWwgU3RhdGVtZW50XSIsICJcbiIpOwor
ICAgIGRhdGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hG
aWRlbGl0eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iIDogIltOb3JtYWwg
U3RhdGVtZW50XSIsICJcbiIpOwogCiAgICAgZGF0YUxvZygiXHRcdCNMb2NhbCNcblx0XHQiLCBs
b2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwg
IlxuXHRcdCIpLCAiXG4iKTsKICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKQEAg
LTkxLDEwICs4Nyw3IEBAIHN0YXRpYyBib29sIGRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW8K
ICAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rp
b25SZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlS
ZXR1cm5TdGF0ZW1lbnQpICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoZGVzY3Jp
cHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2Nh
dGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQg
IT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlh
YmxlSUQgIT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAorICAgIGlmIChkZXNjcmlwdG9y
ID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwgJiYgbG9jYXRpb24tPm1fZ2xv
YmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQpICAKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAko
cmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGVudW0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciB7CiAgICAg
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCA9IDEsCi0gICAgVHlwZVByb2ZpbGVy
U2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgPSAyLAotICAgIFR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDMKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yRnVuY3Rpb25SZXR1cm4gPSAyCiB9OwogCiBjbGFzcyBIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTEgKzEwMyw2IEBAIFN5
bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgLCBtX2NhcHR1cmVFbmQoMCkKICAg
ICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVhcldhdGNocG9pbnQpCiB7Ci0gICAgaWYgKHZt
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgbV91bmlxdWVJ
RE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVlSURNYXA+KCk7Ci0gICAgICAgIG1fcmVnaXN0
ZXJUb1ZhcmlhYmxlTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlclRvVmFyaWFibGVNYXA+
KCk7Ci0gICAgICAgIG1fdW5pcXVlVHlwZVNldE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVl
VHlwZVNldE1hcD4oKTsKLSAgICB9CiB9CiAKIFN5bWJvbFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7
IH0KQEAgLTE2NCw3MCArMTU5LDEwNCBAQCBTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25l
Q2FwdHVyZWROCiAgICAgICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xv
d0FyZ3VtZW50c1tpXTsKICAgICB9CiAKLSAgICBpZiAobV91bmlxdWVJRE1hcCAmJiByZXN1bHQt
Pm1fdW5pcXVlSURNYXApIHsKKyAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpIHsKKyAg
ICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8g
aXRlciA9IG1fdW5pcXVlSURNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IG1f
dW5pcXVlSURNYXAtPmVuZCgpOworICAgICAgICAgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmls
aW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5k
ID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICByZXN1bHQt
Pm1fdW5pcXVlSURNYXAtPnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNldChp
dGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5iZWdpbigpOwotICAgICAg
ICAgICAgYXV0byBlbmQgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZW5kKCk7CisgICAgICAg
ICAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFy
aWFibGVNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5n
UmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmVuZCgpOwogICAgICAgICAgICAgZm9y
ICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5tX3JlZ2lz
dGVyVG9WYXJpYWJsZU1hcC0+c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdW5pcXVlVHlwZVNldE1hcC0+YmVnaW4oKTsK
LSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlxdWVUeXBlU2V0TWFwLT5lbmQoKTsKKyAgICAg
ICAgICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVT
ZXRNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFy
ZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV91bmlxdWVUeXBlU2V0
TWFwLT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLnNldChpdGVyLT5r
ZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK3ZvaWQgU3ltYm9sVGFibGU6OnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKQoreworICAgIGlmIChtX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90eXBlUHJvZmlsaW5n
UmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKKwor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1f
dW5pcXVlSURNYXAuc2V0KGl0ZXItPmtleSwgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVy
YXRpb24pOworICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFy
aWFibGVNYXAuc2V0KGl0ZXItPnZhbHVlLmdldEluZGV4KCksIGl0ZXItPmtleSk7CisgICAgfQor
fQorCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKIHsKLSAg
ICBhdXRvIGl0ZXIgPSBtX3VuaXF1ZUlETWFwLT5maW5kKGtleSk7Ci0gICAgYXV0byBlbmQgPSBt
X3VuaXF1ZUlETWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1
dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmZpbmQoa2V5
KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFw
LmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0
eU5vR2xvYmFsSURFeGlzdHM7CiAKLSAgICBHbG9iYWxWYXJpYWJsZUlEJiBpZCA9IGl0ZXItPnZh
bHVlOworICAgIEdsb2JhbFZhcmlhYmxlSUQgaWQgPSBpdGVyLT52YWx1ZTsKICAgICBpZiAoaWQg
PT0gSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pIHsKICAgICAgICAgaWQgPSB2
bS5nZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpOwotICAgICAgICBtX3VuaXF1ZVR5cGVTZXRNYXAt
PnNldChrZXksIFR5cGVTZXQ6OmNyZWF0ZSgpKTsgLy9tYWtlIGEgbmV3IGdsb2JhbCB0eXBlc2V0
IGZvciB0aGUgSUQKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURN
YXAuc2V0KGtleSwgaWQpOworICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlx
dWVUeXBlU2V0TWFwLnNldChrZXksIFR5cGVTZXQ6OmNyZWF0ZSgpKTsgLy8gTWFrZSBhIG5ldyBn
bG9iYWwgdHlwZXNldCBmb3IgdGhpcyBjb3JyZXNwb25kaW5nIElELgogICAgIH0KLSAgICAgICAg
IAorCiAgICAgcmV0dXJuIGlkOwogfQogCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1
bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50
IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSkKIHsKLSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9W
YXJpYWJsZU1hcC0+ZmluZChyZWdpc3RlckluZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0
ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBl
bmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAg
IGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJs
ZU1hcC5maW5kKHJlZ2lzdGVySW5kZXgpOworICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5n
UmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmVuZCgpOworICAgIGlmIChpdGVyID09
IGVuZCkKKyAgICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CisKICAg
ICByZXR1cm4gdW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2
bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclJl
Z2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5k
ZXgsIFZNJiB2bSkKIHsKLSAgICB1bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwgcmVnaXN0ZXJJ
bmRleCwgdm0pOyAvL2Vuc3VyZSBpdCdzIGNyZWF0ZWQKLSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lz
dGVyVG9WYXJpYWJsZU1hcC0+ZmluZChyZWdpc3RlckluZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1f
cmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRl
ciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsK
KworICAgIHVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCByZWdpc3RlckluZGV4LCB2bSk7IC8v
IExhemlseSBjcmVhdGUgdGhlIFR5cGVTZXQgaWYgbmVjZXNzYXJ5LgorCisgICAgYXV0byBpdGVy
ID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQo
cmVnaXN0ZXJJbmRleCk7CisgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+
bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBnbG9iYWxUeXBlU2V0Rm9yVmFyaWFi
bGUobG9ja2VyLCBpdGVyLT52YWx1ZS5nZXQoKSwgdm0pOwogfQogCiBSZWZQdHI8VHlwZVNldD4g
U3ltYm9sVGFibGU6Omdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQogewotICAgIHVuaXF1ZUlE
Rm9yVmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsKLSAgICByZXR1cm4gbV91bmlxdWVUeXBlU2V0
TWFwLT5maW5kKGtleSktPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGlu
Z1JhcmVEYXRhKTsKKworICAgIHVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsg
Ly8gTGF6aWx5IGNyZWF0ZSB0aGUgVHlwZVNldCBpZiBuZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0
ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLmZpbmQoa2V5
KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVT
ZXRNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlz
aW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMiArNDE3LDYgQEAgcHVibGljOgogICAgIAogICAg
IE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1w
bCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIGlm
IChtX3VuaXF1ZUlETWFwKSB7Ci0gICAgICAgICAgICAvLyBVc2UgYSBmbGFnIHRvIGluZGljYXRl
IHRoYXQgd2UgbmVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIElELiBCZWNhdXNlIFZNIGlzIGluIGNo
YXJnZSBvZiBjcmVhdGluZyB1bmlxdWVJRHMsIAotICAgICAgICAgICAgLy8gd2hlbiB1bmlxdWVJ
RCgpIGlzIGNhbGxlZCwgd2UgY2hlY2sgdGhpcyBmbGFnIHRvIHNlZSBpZiB1bmlxdWVJRCBjcmVh
dGlvbiBpcyBuZWNlc3NhcnkuCi0gICAgICAgICAgICBtX3VuaXF1ZUlETWFwLT5zZXQoa2V5LCBI
aWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7IAotICAgICAgICAgICAgbV9yZWdp
c3RlclRvVmFyaWFibGVNYXAtPnNldChlbnRyeS5nZXRJbmRleCgpLCBrZXkpOwotICAgICAgICB9
CiAgICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAt
NDM0LDEwICs0MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRh
YmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5pcXVlSURNYXApIHsKLSAg
ICAgICAgICAgIG1fdW5pcXVlSURNYXAtPnNldChrZXksIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVl
SURHZW5lcmF0aW9uKTsgCi0gICAgICAgICAgICBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0
KGVudHJ5LmdldEluZGV4KCksIGtleSk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fbWFw
LnNldChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00ODksNiArNDc5LDggQEAgcHVibGlj
OgogICAgIAogICAgIFN5bWJvbFRhYmxlKiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKIAorICAg
IHZvaWQgcHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYpOworCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKQEAgLTUxMyw5ICs1MDUs
MTIgQEAgcHJpdmF0ZToKICAgICB+U3ltYm9sVGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURNYXA+IG1fdW5pcXVlSURNYXA7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4gbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZVR5cGVTZXRNYXA+IG1fdW5pcXVlVHlwZVNldE1h
cDsKKyAgICBzdHJ1Y3QgVHlwZVByb2ZpbGluZ1JhcmVEYXRhIHsKKyAgICAgICAgVW5pcXVlSURN
YXAgbV91bmlxdWVJRE1hcDsKKyAgICAgICAgUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0
ZXJUb1ZhcmlhYmxlTWFwOworICAgICAgICBVbmlxdWVUeXBlU2V0TWFwIG1fdW5pcXVlVHlwZVNl
dE1hcDsKKyAgICB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+
IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCiAgICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzI1MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsMTcgKzYyLDE2IEBAIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9y
VmEKICAgICBlbHNlIGlmICh2LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldCA9IFR5cGVPYmplY3Q7
CiAgICAgZWxzZQotICAgICAgICBDUkFTSCgpOworICAgICAgICByZXQgPSBUeXBlTm90aGluZzsK
IAogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgVHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpT
VmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlEIGlk
KSAKK3ZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkgCiB7Ci0gICAg
UnVudGltZVR5cGUgdCA9IGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUodik7Ci0gICAgbV9zZWVuVHlw
ZXMgPSBtX3NlZW5UeXBlcyB8IHQ7CisgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHR5
cGU7CiAKLSAgICBpZiAoaWQgJiYgc2hhcGUgJiYgIXYuaXNTdHJpbmcoKSAmJiAhdi5pc0Z1bmN0
aW9uKCkpIHsKKyAgICBpZiAoaWQgJiYgc2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CiAg
ICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9yeS5pc1ZhbGlkS2V5KGlkKSk7CiAgICAg
ICAgIGF1dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0b3J5LmZpbmQoaWQpOwogICAgICAgICBp
ZiAoaXRlciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5lbmQoKSkgewpAQCAtMjE4LDggKzIxNyw2
IEBAIFN0cmluZyBUeXBlU2V0OjpkaXNwbGF5TmFtZSgpIGNvbnN0CiBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5
cGVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PFN0cmluZz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
OjpjcmVhdGUoKTsKLSAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlRnVuY3Rpb24pCi0gICAgICAg
ICBzZWVuLT5hZGRJdGVtKCJGdW5jdGlvbiIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVV
bmRlZmluZWQpCiAgICAgICAgICBzZWVuLT5hZGRJdGVtKCJVbmRlZmluZWQiKTsKICAgICBpZiAo
bV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBjbGFzcyBU
eXBlU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZVNlCiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8VHlwZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFR5cGVTZXQp
OyB9CiAgICAgVHlwZVNldCgpOwotICAgIHZvaWQgYWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKKyAgICB2b2lkIGFkZFR5
cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0
cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5cGUgZ2V0UnVudGltZVR5cGVGb3JWYWx1
ZShKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkgY29u
c3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2VuYWJsZWRQ
cm9maWxlcihudWxscHRyKQogICAgICwgbV9idWlsdGluRXhlY3V0YWJsZXMoQnVpbHRpbkV4ZWN1
dGFibGVzOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV9uZXh0VW5pcXVlVmFyaWFibGVJRCgxKQor
ICAgICwgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50KDApCiB7CiAgICAg
aW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogICAgIFN0YWNrQm91bmRzIHN0
YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CkBAIC0yODMsMTEgKzI4NCw4IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAvLyB3b24ndCB1c2UgdGhp
cy4KICAgICBtX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyKCkpOwogCi0gICAgLy8gRklYTUU6IGNvbmRpdGlvbmFsbHkgYWxsb2Nh
dGUgdGhpcyBzdHVmZiBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zcGVjdG9yIGlzIHJ1
bm5pbmcgT1IgdGhpcyBmbGFnIGlzIGVuYWJsZWQgKG5vdCBqdXN0IGlmIHRoZSBmbGFnIGlzIGVu
YWJsZWQpLgotICAgIGlmIChPcHRpb25zOjpwcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKLSAgICAgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcj4oKTsKLSAgICAgICAgbV9oaWdoRmlkZWxpdHlMb2cg
PSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRlbGl0eUxvZz4oKTsKLSAgICB9CisgICAgaWYgKE9w
dGlvbnM6OnByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOwogfQogCiBWTTo6flZNKCkKQEAgLTg1OCw2ICs4NTYs
MzQgQEAgdm9pZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0K
IAorYm9vbCBWTTo6ZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpCit7CisgICAgYm9v
bCBuZWVkc1RvUmVjb21waWxlID0gZmFsc2U7CisgICAgaWYgKCFtX2hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFbmFibGVkQ291bnQpIHsKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHRydWU7
CisgICAgICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+KCk7CisgICAgICAgIG1faGlnaEZpZGVsaXR5TG9nID0g
c3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlMb2c+KCk7CisgICAgfQorICAgIG1faGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRDb3VudCsrOworCisgICAgcmV0dXJuIG5lZWRzVG9S
ZWNvbXBpbGU7Cit9CisKK2Jvb2wgVk06OmRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFi
bGVkQ291bnQgPiAwKTsKKworICAgIGJvb2wgbmVlZHNUb1JlY29tcGlsZSA9IGZhbHNlOworICAg
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRDb3VudC0tOworICAgIGlmICghbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50KSB7CisgICAgICAgIG1faGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyLnJlc2V0KG51bGxwdHIpOworICAgICAgICBtX2hpZ2hGaWRlbGl0
eUxvZy5yZXNldChudWxscHRyKTsKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG5lZWRzVG9SZWNvbXBpbGU7Cit9CisKIHZvaWQgVk06OmR1bXBI
aWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpCiB7CiAgICAgaWYgKCFpc1Byb2ZpbGluZ1R5cGVz
V2l0aEhpZ2hGaWRlbGl0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWls
dGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0KIAogICAgICAgICBib29sIGlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkgeyByZXR1cm4gISFtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjsg
fQorICAgICAgICBib29sIGVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICAg
ICAgYm9vbCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOwogICAgICAgICBIaWdo
RmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5TG9n
LmdldCgpOyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciogaGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuZ2V0KCk7
IH0KICAgICAgICAgVHlwZUxvY2F0aW9uKiBuZXh0TG9jYXRpb24oKSB7IHJldHVybiBtX2xvY2F0
aW9uSW5mby5hZGQoKTsgfSAvL1RPRE86IHBvc3NpYmxlIG9wdG1pemF0aW9uOiB3aGVuIGNvZGVi
bG9ja3MgZGllLCByZXBvcnQgd2hpY2ggbG9jYXRpb25zIGFyZSBubyBsb25nZXIgYmVpbmcgY2hh
bmdlZCBzbyB3ZSBkb24ndCB3YWxrIG92ZXIgdGhlbQpAQCAtNTUzLDYgKzU1NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyPiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEhpZ2hGaWRlbGl0eUxvZz4gbV9oaWdoRmlkZWxpdHlMb2c7CiAgICAgICAgIEdsb2JhbFZhcmlh
YmxlSUQgbV9uZXh0VW5pcXVlVmFyaWFibGVJRDsKKyAgICAgICAgdW5zaWduZWQgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50OwogICAgICAgICBCYWc8VHlwZUxvY2F0aW9u
PiBtX2xvY2F0aW9uSW5mbzsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzI1
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMCBAQAorMjAxNC0wOC0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQg
YW5kIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBoYXMgdmFyaW91cyBzdWJjbGFzc2VzIG9mIEluc3BlY3RvclJ1bnRp
bWVBZ2VudCBjYWxsIHRoZWlyCisgICAgICAgIHN1cGVyIGNsYXNzJ3MgaW1wbGVtZW50YXRpb24g
b2Ygd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQuCisKKyAgICAgICAgVGhpcyBqdXN0IGNh
bGxzIGEgc3VwZXIgY2xhc3MncyBtZXRob2QsIG5vIG5lZWQgdG8gdGVzdCBpdC4KKworICAgICAg
ICAqIGluc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorCiAyMDE0
LTA4LTEyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNU0Vd
W01hY10gU2Vla2luZyB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYSBidWZmZXJlZCByYW5nZSBz
dGFsbHMgdmlkZW8gcGxheWJhY2sKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
UnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZVJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTMg
KzY3LDE1IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmQKICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFz
b24pCit2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAg
ICBTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgZGlzYWJsZSgmZXJyb3JTdHJpbmcpOworCisgICAg
SW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChyZWFz
b24pOwogfQogCiB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVu
dGltZUFnZW50LmNwcAkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEx
IEBAIHZvaWQgV29ya2VyUnVudGltZUFnZW50OjpkaWRDcmVhdGVGcm9udGUKICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
YmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNvbikK
K3ZvaWQgV29ya2VyUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3JEaXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLmNsZWFyKCk7CisKKyAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIEluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRp
bWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpCg==
</data>
<flag name="review"
          id="261114"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="261115"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236577</attachid>
            <date>2014-08-13 21:29:30 -0700</date>
            <delta_ts>2014-08-14 11:46:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>99437</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNC0wOC0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRp
c2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZXJnZWQgb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBhbmQgb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlIGludG8KKyAgICAgICAgICBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBieSBhZGRpbmcgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBvcGNvZGUuCisgICAg
ICAgIC0gQWx0ZXJlZCBTeW1ib2xUYWJsZSB0byB1c2UgbGVzcyBtZW1vcnkgYnkgYWRkaW5nIGEg
cmFyZSBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgdHlwZSBwcm9maWxpbmcuCisgICAg
ICAgIC0gQ3JlYXRlZCBhbiBpbnRlcmZhY2UgdG8gdHVybiBvbiBhbmQgb2ZmIHR5cGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYgorICAgICAgICAgIEluc3BlY3Rvci4KKyAgICAgICAgLSBSZWZhY3Rv
cmVkIGhvdyBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIEhpZ2hGaWRlbGl0eUxvZyB0byBtYWtlIGl0
CisgICAgICAgICAgZWFzaWVyIHRvIGlubGluZSB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LgorICAgICAgICAtIEltcGxlbWVudGVkIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICBieSBpbmxpbmluZyB0aGUgcHJvY2Vz
cyBvZiB3cml0aW5nIHRvIHRoZSBsb2cgYW5kIGRvaW5nIGEgc21hbGwgYW1vdW50CisgICAgICAg
ICAgb2YgdHlwZSBpbmZlcmVuY2Ugb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2NvcGVEZXBlbmRlbnRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uOjpUeXBlTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNj
b3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5v
ZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJl
Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0
b3JSdW50aW1lQWdlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
cmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmFibGVkU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRGcm9tU2NvcGVDb21tb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMTElu
dDo6cHV0VG9TY29wZUNvbW1vbik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0
R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjppbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxp
dHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hG
aWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdo
RmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dFbmRQdHIpOgorICAgICAgICAoSlNDOjpIaWdoRmlk
ZWxpdHlMb2c6OmxvZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
Ojpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRj
aGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6
Y2xvbmVDYXB0dXJlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnByZXBhcmVG
b3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnVuaXF1ZUlERm9yVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVl
SURGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0
Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZv
clZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChK
U0M6OlN5bWJvbFRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZUxvY2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbik6CisgICAgICAgICogcnVudGltZS9U
eXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAg
IChKU0M6OlR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcyk6CisgICAgICAgIChKU0M6OlR5
cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9UeXBl
U2V0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6
CisgICAgICAgIChKU0M6OlZNOjpuZXh0VHlwZUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06
OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
YWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcEhp
Z2hGaWRlbGl0eVByb2ZpbGluZ1R5cGVzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAg
ICAgIChKU0M6OlZNOjpuZXh0TG9jYXRpb24pOiBEZWxldGVkLgorCiAyMDE0LTA4LTEzICBBa29z
IEtpc3MgIDxha2lzc0BpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgQWRkIEFSTTY0IHN1cHBv
cnQgdG8gQ01ha2UtYmFzZWQgYnVpbGRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw5ICsxMDksNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJp
bWl0aXZlIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNv
bHZlX3Njb3BlIiwgImxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9n
ZXRfZnJvbV9zY29wZSIsICJsZW5ndGgiIDogOCB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKLSAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3Ro
IiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDQgfSwKQEAgLTEyMiw3ICsxMjAsNyBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfcHJvZmlsZV93aWxsX2NhbGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfZGlkX2NhbGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2VuZCIsICJsZW5ndGgiIDogMiB9LAotICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3Ro
IiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9o
aWdoX2ZpZGVsaXR5IiwgImxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2hhc19pbmRleGVkX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA1IH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5IiwgImxlbmd0aCIg
OiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNiBA
QCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
b3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGVfd2l0aF9wcm9maWxlOgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0xMjMsNyArMTIyLDYgQEAgdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9w
dXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6
CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToK
ICAgICBjYXNlIG9wX2dldF9ieV9pZDoKQEAgLTI1MSw3ICsyNDksNiBAQCB2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6
CiAgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgIGNhc2Ugb3BfcG9w
X3Njb3BlOgogICAgIGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6
CkBAIC0zMjEsNyArMzE4LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbAogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNl
IG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MjMsNyArMTUyMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAg
ICAgICAgICAgICAgb3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgIGNhc2Ugb3Bf
cHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE1MzIsOCArMTUz
MSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICArK2l0OyAv
LyBTdHJ1Y3R1cmUKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7
IC8vIE9wZXJhbmQKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInB1dF90b19zY29wZSIpOwotICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBv
cF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKQotICAgICAgICAgICAgICAgICsraXQ7CiAgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sIDxzdHJ1Y3R1cmU+LCAl
ZCIsCiAgICAgICAgICAgICAgICAgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAs
IGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwKICAgICAg
ICAgICAgICAgICBtb2RlQW5kVHlwZS5vcGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5k
VHlwZS5tb2RlKCkpLCByZXNvbHZlVHlwZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKQEAgLTE3
MTYsNiArMTcxMywxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KSB7CisgICAgICAgIGlmIChtX3ZtLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9ySGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAg
ICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgp
LCBzeW1ib2xUYWJsZS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX3ZtKSk7CiAgICAgICAgICAgICBk
aWRDbG9uZVN5bWJvbFRhYmxlID0gdHJ1ZTsKQEAgLTE5NDksMTMgKzE5NTEsMTEgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToK
ICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewotICAgICAgICAgICAgaW50IG9mZnNl
dCA9IChwY1swXS51Lm9wY29kZSA9PSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgPyAy
IDogMSk7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2Zp
bGVzW3BjW29wTGVuZ3RoIC0gb2Zmc2V0XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tvcExlbmd0aCAtIDFdLnUub3Bl
cmFuZF07CiAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAt
MSk7CiAgICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKLSAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSBvZmZzZXRdID0gcHJvZmlsZTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CiAKICAgICAg
ICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5
cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CkBAIC0xOTY5LDE2ICsxOTY5LDkgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAg
ICBpZiAocGNbMF0udS5vcGNvZGUgPT0gb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBn
ZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5k
VHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCAuLi4sIFR5cGVMb2NhdGlvbgotICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAg
ICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShv
cCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDhdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0
aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAg
Ly8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kCiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlk
ZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKQEAgLTE5OTUsMzAgKzE5ODgsNTAgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9w
LnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogCi0gICAgICAgICAgICBpZiAo
cGNbMF0udS5vcGNvZGUgPT0gb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSkgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogcHV0X3RvX3Nj
b3BlX3dpdGhfcHJvZmlsZSBzY29wZSwgaWQsIHZhbHVlLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0
cnVjdHVyZSwgT3BlcmFuZCwgVHlwZUxvY2F0aW9uKgotICAgICAgICAgICAgICAgIHNpemVfdCBp
bnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShvcCwgaWRlbnQsIGlu
c3RydWN0aW9uT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDddLnUu
bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRl
bGl0eTogeworICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlz
OiBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSByZWdUb1Byb2ZpbGUsIFR5cGVM
b2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlwZT8KICAgICAgICAgICAgIHNp
emVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7CiAgICAgICAgICAgICB1
bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKICAgICAgICAgICAgIEdsb2JhbFZhcmlhYmxl
SUQgZ2xvYmFsVmFyaWFibGVJRDsKICAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxU
eXBlU2V0OwogICAgICAgICAgICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUt
PmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChp
bnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKLQorICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBm
bGFnID0gc3RhdGljX2Nhc3Q8UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxh
Zz4ocGNbM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSA9IG51bGxwdHI7CisKICAgICAgICAgICAgIHN3aXRjaCAoZmxhZykgeworICAgICAgICAgICAg
Y2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGU6CisgICAgICAgICAgICBjYXNlIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlOiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihwY1s1
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFi
c3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQs
IChmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlID8gR2V0IDogUHV0KSwg
dHlwZSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBm
b3Igb3AudHlwZSBoZXJlLCBhbmQgYWxzbyBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2Fu
J3Qgc3RhdGljYWxseSBkZXRlcm1pbmUgdGhlIGdsb2JhbElECisgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTE4NAorICAgICAgICAg
ICAgICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlID0gb3AuYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcC50eXBlID09IEdsb2JhbFZhcikKKyAgICAgICAgICAgICAgICAgICAgc3lt
Ym9sVGFibGUgPSBtX2dsb2JhbE9iamVjdC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVGFibGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQg
d2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBm
b3IgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBh
cmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShs
b2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxU
eXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlk
ZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsK
KworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2Fz
ZSBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEOiB7CisgICAgICAgICAgICAgICAgc3lt
Ym9sVGFibGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwogICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAg
IGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JSZWdpc3Rlcihsb2Nr
ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwotICAgICAgICAgICAgICAgIGds
b2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGxvY2tl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgZ2xv
YmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwg
cHJvZmlsZVJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgZ2xvYmFs
VHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCBw
cm9maWxlUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElEOiAKQEAgLTIwMjYsMTAgKzIwMzksNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJ
RCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25UaGlzT2JqZWN0OiB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhp
Z2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1
cm5TdGF0ZW1lbnQ6IHsKICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gcmV0dXJuU3Rh
dGVtZW50VHlwZVNldCgpOwogICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdo
RmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQ7CkBAIC0yMDQzLDcgKzIwNTIsOCBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlv
blBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2Fj
aGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsIG1fb3duZXJFeGVjdXRhYmxl
LT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7
CisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWly
ID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCkt
PmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAorICAgICAgICAgICAgICAgIG1fb3du
ZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlw
ZVNldCwgdm0oKSk7CiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRp
b25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLnNlY29uZDsKIApAQCAtMjUyNCw5ICsyNTM0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGFjdGl2YXRpb24uY2xlYXIoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICAgICAgY2FzZSBvcF9nZXRf
ZnJvbV9zY29wZToKLSAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmls
ZToKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAgICAg
UmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0KICAgICAgICAgICAgICAgICAgICAgUmVz
b2x2ZU1vZGVBbmRUeXBlKGN1ckluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CkBAIC0zOTM1LDM1
ICszOTQzLDQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaQogfQog
I2VuZGlmCiAKLVR5cGVMb2NhdGlvbiogQ29kZUJsb2NrOjpzY29wZURlcGVuZGVudFByb2ZpbGUo
UmVzb2x2ZU9wIG9wLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc2l6ZV90IGluc3RydWN0aW9u
T2Zmc2V0KQotewotICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOwotICAgIGJvb2wg
c2hvdWxkQW5hbHl6ZSA9IG1fdW5saW5rZWRDb2RlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4
cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3Rh
cnQsIGRpdm90RW5kKTsKLSAgICBHbG9iYWxWYXJpYWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQ7Ci0g
ICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7Ci0KLSAgICAvLyBGSVhNRTogaGFuZGxl
IG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBhbmQgYWxzbyBjb25zaWRlciB3aGF0IHRv
IGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRlcm1pbmUgdGhlIGdsb2JhbElECi0gICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKLSAgICBpZiAob3AudHlwZSA9PSBD
bG9zdXJlVmFyKSAKLSAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1ib2xU
YWJsZSgpOwotICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQotICAgICAgICBzeW1i
b2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1ib2xUYWJsZSgpOwotICAgIAotICAg
IGlmIChzeW1ib2xUYWJsZSkgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRh
YmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0g
ICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlh
YmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGds
b2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOwotCi0gICAgc3Rk
OjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtKCktPmhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRUeXBlTG9jYXRpb24o
Z2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3Rh
cnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKLSAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwotICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxv
Y2F0aW9uUGFpci5zZWNvbmQ7Ci0KLSAgICBpZiAoc2hvdWxkQW5hbHl6ZSAmIGlzTmV3TG9jYXRp
b24pCi0gICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdM
b2NhdGlvbihsb2NhdGlvbik7Ci0KLSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIwLDggKzEwMjAsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJlRGF0YSk7CiAgICAg
fQogCi0gICAgVHlwZUxvY2F0aW9uKiBzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9wLCBj
b25zdCBJZGVudGlmaWVyJiwgc2l6ZV90KTsKLSAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZv
aWQgcmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAgICAgdm9pZCByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5
cGVMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9UeXBlTG9jYXRpb24uaAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMiArMzMs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBlbnVtIEhpZ2hGaWRlbGl0eUdsb2JhbElERmxhZ3Mgewog
ICAgIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uID0gLTEsCiAgICAgSGlnaEZp
ZGVsaXR5Tm9HbG9iYWxJREV4aXN0cyA9IC0yLAotICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRl
bWVudCA9IC0zLAotICAgIEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPSAtNAorICAgIEhpZ2hG
aWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zCiB9OwogCiB0eXBlZGVmIGludHB0cl90IEdsb2Jh
bFZhcmlhYmxlSUQ7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbiB7CiBwdWJsaWM6Ci0gICAgVHlwZUxv
Y2F0aW9uKCkgCi0gICAgICAgIDogbV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0
ZW1lbnQoVUlOVF9NQVgpCisgICAgVHlwZUxvY2F0aW9uKCkKKyAgICAgICAgOiBtX2xhc3RTZWVu
VHlwZShUeXBlTm90aGluZykKKyAgICAgICAgLCBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJl
dHVyblN0YXRlbWVudChVSU5UX01BWCkKICAgICAgICAgLCBtX2luc3RydWN0aW9uVHlwZVNldChU
eXBlU2V0OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2dsb2JhbFR5cGVTZXQobnVsbHB0cikKICAg
ICB7CiAgICAgfQogCiAgICAgR2xvYmFsVmFyaWFibGVJRCBtX2dsb2JhbFZhcmlhYmxlSUQ7Cisg
ICAgUnVudGltZVR5cGUgbV9sYXN0U2VlblR5cGU7CiAgICAgaW50cHRyX3QgbV9zb3VyY2VJRDsK
ICAgICB1bnNpZ25lZCBtX2Rpdm90U3RhcnQ7CiAgICAgdW5zaWduZWQgbV9kaXZvdEVuZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDcgKzExNSw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZSgKIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdCgpOwogCi0gICAgaWYgKG1fY29kZUJs
b2NrLT5zeW1ib2xUYWJsZSgpKQorICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSAm
JiAhbV9jb2RlQmxvY2stPnZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
CiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRTeW1ib2xUYWJsZShtX2NvZGVCbG9jay0+c3ltYm9s
VGFibGUoKS0+Y2xvbmVDYXB0dXJlZE5hbWVzKCptX2NvZGVCbG9jay0+dm0oKSkpOwogCiAgICAg
aWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUoCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh3YXRjaGFibGVWYXJpYWJsZShkc3QtPmluZGV4KCkpKTsKIAogICAgIGlmICghZHN0LT5p
c1RlbXBvcmFyeSgpICYmIGlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAg
ICAgIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGRzdCwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVIYXNHbG9iYWxJRCk7CisgICAgICAgIGVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KGRzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNHbG9iYWxJRCwgbnVsbHB0cik7CiAKICAg
ICByZXR1cm4gZHN0OwogfQpAQCAtMTEyNCwxMiArMTEyNCwxOCBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SGlnaEZpZGVsaXR5CiAgICAgbV9jb2RlQmxvY2stPmFkZEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIHN0YXJ0LCBlbmQp
OwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2Zp
bGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcgZmxhZywgY29uc3Qg
SWRlbnRpZmllciogaWRlbnRpZmllcikKIHsKKyAgICBpZiAoZmxhZyA9PSBQcm9maWxlVHlwZXNC
eXRlY29kZUdldEZyb21TY29wZSB8fCBmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9T
Y29wZSkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaWRlbnRpZmllcik7CisKKyAgICAvLyBUaGUg
Zm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdo
X2ZpZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmllcj8s
IHJlc29sdmVUeXBlPwogICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hf
ZmlkZWxpdHkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZWdpc3RlclRvUHJvZmlsZS0+
aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBUaGlzIGlzIGEgcGxh
Y2Vob2xkZXIgZm9yIHRoZSBUeXBlTG9jYXRpb24gb2JqZWN0IHBvaW50ZXIuCisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmbGFnKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaWRlbnRpZmllciA/IGFkZENvbnN0YW50KCppZGVudGlm
aWVyKSA6IDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKIH0K
IAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRz
dCwgYm9vbCBiKQpAQCAtMTI3MSwyMiArMTI3Nyw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0RnIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldEZyb21TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJlc29s
dmVNb2RlIHJlc29sdmVNb2RlKQotewotICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9mcm9tX3Njb3BlX3dp
dGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJh
bmQoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgVHlw
ZUxvY2F0aW9uIHBvaW50ZXIuCi0gICAgcmV0dXJuIGRzdDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUgcmVz
b2x2ZU1vZGUpCiB7CiAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKQEAgLTEzMDIsMjEgKzEyOTIsNiBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvCiAgICAgcmV0dXJuIHZhbHVlOwogfQog
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmls
ZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0
ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQotewotICAgIG1fY29kZUJsb2Nr
LT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0K
LSAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpOwotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
dmFsdWUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFu
ZFR5cGUocmVzb2x2ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBU
eXBlTG9jYXRpb24gcG9pbnRlci4KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5zdGFuY2VPZihSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIHZhbHVlLCBSZWdpc3RlcklEKiBiYXNlUHJvdG90eXBlKQogeyAKICAgICBlbWl0T3Bj
b2RlKG9wX2luc3RhbmNlb2YpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcyNTQ4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsMTIgKzIyMywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgVHJ5RGF0YSogdHJ5RGF0YTsKICAgICB9OwogCi0gICAgZW51bSBQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIHsgCisgICAgZW51bSBQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIHsKKyAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQ
dXRUb1Njb3BlLAorICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUdldEZyb21TY29wZSwKICAg
ICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNHbG9iYWxJRCwKICAgICAgICAgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uQXJndW1lbnQsCi0gICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rp
b25UaGlzT2JqZWN0LAotICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJu
U3RhdGVtZW50ICAKKyAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0
YXRlbWVudAogICAgIH07CiAKICAgICBjbGFzcyBCeXRlY29kZUdlbmVyYXRvciB7CkBAIC00MTAs
NyArNDExLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGVt
aXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9z
aXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmREaXZvdCk7Ci0gICAg
ICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0ZXJJRCogZHN0
LCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnKTsKKyAgICAgICAgdm9p
ZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRv
UHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZywgY29uc3Qg
SWRlbnRpZmllciopOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRz
dCwgZG91YmxlKTsKQEAgLTQ3Nyw5ICs0NzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUoKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29s
dmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUpOwotICAgICAgICBSZWdpc3RlcklE
KiBlbWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVNb2RlKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXIm
LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUpOwotICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlm
aWVyJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsKIAogICAgICAgICBQYXNzUmVm
UHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsKICAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcg
KzEzNywxNCBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiB7CiAg
ICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBn
ZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOworCisgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBnZW5lcmF0b3IudGhpc1JlZ2lz
dGVyKCkpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQsIG51bGxwdHIpOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdGhp
c0xlbmd0aCA9IDQ7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKHBvc2l0aW9uKCksIEpTVGV4dFBvc2l0aW9uKC0xLCBwb3NpdGlv
bigpLm9mZnNldCArIHRoaXNMZW5ndGgsIC0xKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTMsNyArMTYwLDcgQEAgUmVnaXN0
ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICBpZiAoZHN0ID09IGdl
bmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
aWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkobG9jYWwu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOworICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGxvY2FsLmdldCgpLCBQcm9m
aWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKG1fcG9zaXRp
b24sIEpTVGV4dFBvc2l0aW9uKC0xLCBtX3Bvc2l0aW9uLm9mZnNldCArIG1faWRlbnQubGVuZ3Ro
KCksIC0xKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwuZ2V0KCkpOwpAQCAtMTYyLDEzICsxNjksMTMgQEAg
UmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgIEpTVGV4dFBvc2l0
aW9uIGRpdm90ID0gbV9zdGFydCArIG1faWRlbnQubGVuZ3RoKCk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgbV9zdGFydCwgZGl2b3QpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJl
Z2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7Cisg
ICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZmluYWxE
ZXN0LCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgcmV0
ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFs
RGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGUsICZtX2lkZW50KTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
bV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVu
dC5sZW5ndGgoKSwgLTEpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0
KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM4Nyw3
ICszOTQsNyBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0CiAgICAg
UmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsK
ICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGZpbmFsRGVzdCwg
YmFzZS5nZXQoKSwgcHJvcGVydHkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAg
ICByZXR1cm4gcmV0OwpAQCAtNDEzLDcgKzQyMCw3IEBAIG5vbkFyZ3VtZW50c1BhdGg6CiAgICAg
UmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsK
ICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBi
YXNlLCBtX2lkZW50KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5
KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhw
cmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJu
IHJldDsKQEAgLTQ5Nyw3ICs1MDQsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCCiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5l
bWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFs
dWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRy
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVz
c2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dDsKQEAgLTUxOCw3ICs1MjUsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZW1pCiAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLCB0aGVuIGl0J3Mgbm90IG9uZSBvZiBv
dXIgYnVpbHQtaW4gY29uc3RydWN0b3JzLgogICAgICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0
eSgpKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXQ7CkBAIC01MzQsNyArNTQxLDcgQEAgUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgIGdlbmVyYXRvci5lbWl0
R2V0RnJvbVNjb3BlKGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1f
aWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFs
dWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRy
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVz
c2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dDsKQEAgLTU1Myw3ICs1NjAsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZTo6ZW1pCiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGJhc2UuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2Fs
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBp
ZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVl
LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7
CkBAIC01NzEsNyArNTc4LDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dAogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBl
Y3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9i
YWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2Jh
bElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJldDsKQEAgLTY0NSw3ICs2NTIsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgp
KTsKICAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0K
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC03NTksNyArNzY2LDcgQEAgUmVnaXN0
ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGVuZC5nZXQoKSk7CiAgICAgfQogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwpAQCAtODE0LDEx
ICs4MjEsMTEgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgc2NvcGUuZ2V0KCksIGlkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBvbGRWYWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRo
cm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9m
aWxlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZS5n
ZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlLCAmaWRlbnQpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZv
dW5kKTsKKyAgICB9CiAKICAgICByZXR1cm4gb2xkVmFsdWUuZ2V0KCk7CiB9CkBAIC04NDIsNyAr
ODQ5LDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dAogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5Lmdl
dCgpLCB2YWx1ZS5nZXQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eSh2YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2
ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBvbGRWYWx1
ZSk7CkBAIC04NjYsNyArODczLDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXREb3Qo
Qnl0ZWNvZAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQo
KSwgaWRlbnQsIHZhbHVlLmdldCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
fQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9s
ZFZhbHVlKTsKQEAgLTEwMDIsMTEgKzEwMDksMTEgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6
ZW1pdFJlc29sdmUoQnl0ZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRv
ci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgaWRlbnQp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0RnJvbVNj
b3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCksIGlkZW50LCBUaHJvd0lm
Tm90Rm91bmQpOwogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBtX29w
ZXJhdG9yKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50
LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRUb1Njb3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhy
b3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZp
ZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNlIAotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5n
ZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgdmFsdWUuZ2V0KCkpOwogfQogCkBAIC0xMDI3LDcg
KzEwMzQsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlCiAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHku
Z2V0KCksIHZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFs
dWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTA0
OSw3ICsxMDU2LDcgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdERvdChCeXRlY29kZQog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQs
IHZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwpAQCAtMTUyMCwxMyAr
MTUyNywxMiBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0KCks
IG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlw
ZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlzKTsKLSAgICBSZWdpc3RlcklE
KiByZXQ7IAorICAgIFJlZ2lzdGVySUQqIHJldHVyblJlc3VsdCA9IGdlbmVyYXRvci5lbWl0UHV0
VG9TY29wZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91
bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkgewotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShz
Y29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmVzdWx0Lmdl
dCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsICZtX2lkZW50KTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0ID0gZ2VuZXJh
dG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRo
cm93SWZOb3RGb3VuZCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgcmV0dXJuIHJldHVy
blJlc3VsdDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnblJl
c29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTU5LDEz
ICsxNTY1LDEyIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAg
ICAgICAgZHN0ID0gMDsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9y
LmVtaXROb2RlKGRzdCwgbV9yaWdodCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIFJlZ2lzdGVySUQqIHJl
dDsKKyAgICBSZWdpc3RlcklEKiByZXR1cm5SZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2Nv
cGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0
TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgIGlm
IChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAg
ICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwg
bV9pZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lm
Tm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXN1bHQuZ2V0KCksIFByb2ZpbGVUeXBlc0J5
dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUo
c2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9k
ZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwotICAgIHJldHVy
biByZXQ7CisgICAgfSAKKyAgICByZXR1cm4gcmV0dXJuUmVzdWx0OwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU3OSw3ICsxNTg0LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWdu
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKAogICAgIFJlZ2lzdGVySUQqIGZvcndhcmRSZXN1bHQgPSAo
ZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpID8gcmVzdWx0IDogZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihyZXN1bHQp
LCByZXN1bHQpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0K
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBmb3J3
YXJkUmVzdWx0KTsKQEAgLTE1OTgsNyArMTYwMyw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlE
b3ROb2RlOjplbWl0Qnl0ZWMKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHVwZGF0ZWRWYWx1ZSk7CiAg
ICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVk
VmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZv
KGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBAIC0x
NjI0LDcgKzE2MjksNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
CiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgZm9yd2FyZFJlc3Vs
dCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShm
b3J3YXJkUmVzdWx0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2Fy
ZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRy
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVz
c2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CkBA
IC0xNjQ0LDcgKzE2NDksNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVt
aXRCCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwg
cHJvcGVydHkuZ2V0KCksIHVwZGF0ZWRWYWx1ZSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5
cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVkVmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgfQogCkBAIC0yMjUxLDcgKzIyNTYsNyBAQCB2b2lkIFJldHVybk5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlCiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuUmVnaXN0
ZXIgPSBtX3ZhbHVlID8gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV92YWx1ZSkgOiBnZW5lcmF0
b3IuZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdldCgpLCBQcm9maWxl
VHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdldCgpLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50LCBudWxscHRyKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5z
Y29wZURlcHRoKCkpIHsKQEAgLTI1ODIsMTcgKzI1ODcsMTMgQEAgdm9pZCBFdmFsTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZQogdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAg
IEpTVGV4dFBvc2l0aW9uIHN0YXJ0KC0xLCBtX3N0YXJ0U3RhcnRPZmZzZXQsIC0xKTsgLy8gVGhp
cyBkaXZvdCBpcyBhdCB0aGUgb3BlbiBicmFjZSBvZiB0aGUgZnVuY3Rpb24uCi0gICAgICAgIEpT
VGV4dFBvc2l0aW9uIGVuZCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0ICsgMSwgLTEpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZ2VuZXJhdG9yLnRo
aXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdCk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKHN0YXJ0LCBlbmQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFyYW1l
dGVycy0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgRGVzdHJ1
Y3R1cmluZyBhc3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGlmICghbV9w
YXJhbWV0ZXJzLT5hdChpKS0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgQmluZGluZ05vZGUqIHBhcmFtZXRlciA9IHN0YXRpY19jYXN0PEJp
bmRpbmdOb2RlKj4obV9wYXJhbWV0ZXJzLT5hdChpKSk7CiAgICAgICAgICAgICBSZWdpc3RlcklE
IHJlZyhDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKLSAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uQXJndW1lbnQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCZyZWcsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25B
cmd1bWVudCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhwYXJhbWV0ZXItPmRpdm90U3RhcnQoKSwgcGFy
YW1ldGVyLT5kaXZvdEVuZCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MTQsNyArMjYxNSw3
IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICBpZiAoIXJl
dHVybk5vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuaXNDb25zdHJ1
Y3RvcigpID8gZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpIDogZ2VuZXJhdG9yLmVtaXRMb2FkKDAs
IGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkocjAsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5T
dGF0ZW1lbnQpOyAvLyBEbyBub3QgZW1pdCBleHByZXNzaW9uIGluZm8gZm9yIHRoaXMgcHJvZmls
ZSBiZWNhdXNlIGl0J3Mgbm90IGluIHRoZSB1c2VyJ3Mgc291cmNlIGNvZGUuCisgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocjAsIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOyAvLyBEbyBub3Qg
ZW1pdCBleHByZXNzaW9uIGluZm8gZm9yIHRoaXMgcHJvZmlsZSBiZWNhdXNlIGl0J3Mgbm90IGlu
IHRoZSB1c2VyJ3Mgc291cmNlIGNvZGUuCiAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCgpID49
IGxpbmVTdGFydE9mZnNldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bExlYXZlQ2FsbEZyYW1lLCBsYXN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZz
ZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHIwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNp
bmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlICJQYXJzZXJFcnJvci5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgi
CiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAK
QEAgLTYxLDYgKzYzLDcgQEAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0b3JSdW50aW1l
QQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ICAgICwgbV9zY3JpcHREZWJ1Z1NlcnZlcihudWxscHRyKQogICAgICwgbV9lbmFibGVkKGZhbHNl
KQorICAgICwgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVkKGZhbHNlKQogewogfQogCkBAIC0xOTks
OCArMjAyLDEwIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHkKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZtID0gZ2xvYmFs
Vk0oKTsKICAgICB0eXBlRGVzY3JpcHRpb25zID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPjo6Y3Jl
YXRlKCk7Ci0gICAgaWYgKCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQor
ICAgIGlmICghdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAg
ICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIlRoZSBWTSBkb2VzIG5vdCBjdXJyZW50bHkg
aGF2ZSBUeXBlIEluZm9ybWF0aW9uLiIpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
ZG91YmxlIHN0YXJ0ID0gY3VycmVudFRpbWVNUygpOwogICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygp
LT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1ZXJ5Iik7CkBAIC0yMzEsNiArMjM2LDc2
IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHkKICAgICAgICAgZGF0
YUxvZ0YoIkluc3BlY3Rvcjo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzIHRv
b2sgJWxmbXNcbiIsIGVuZCAtIHN0YXJ0KTsKIH0KIAorY2xhc3MgVHlwZVJlY29tcGlsZXIgOiBw
dWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgdm9p
ZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmICghY2VsbC0+aW5o
ZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZOb3RD
b21waWxpbmcoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+Y2xlYXJVbmxpbmtlZENvZGVGb3JSZWNv
bXBpbGF0aW9uSWZOb3RDb21waWxpbmcoKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCByZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcoVk0mIHZtLCBib29sIHNob3VsZEVu
YWJsZVR5cGVQcm9maWxpbmcpCit7CisgICAgdm0ud2FpdEZvckNvbXBpbGF0aW9uc1RvQ29tcGxl
dGUoKTsKKworICAgIGJvb2wgbmVlZHNUb1JlY29tcGlsZTsKKyAgICBpZiAoc2hvdWxkRW5hYmxl
VHlwZVByb2ZpbGluZykKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHZtLmVuYWJsZUhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICBlbHNlCisgICAgICAgIG5lZWRzVG9SZWNvbXBp
bGUgPSB2bS5kaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworCisgICAgaWYgKG5l
ZWRzVG9SZWNvbXBpbGUpIHsKKyAgICAgICAgVHlwZVJlY29tcGlsZXIgcmVjb21waWxlcjsKKyAg
ICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKHZtLmhlYXApOworICAgICAg
ICB2bS5oZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlvblNjb3BlLCBy
ZWNvbXBpbGVyKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uIHJlYXNv
bikKK3sKKyAgICBpZiAocmVhc29uID09IEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb246Okluc3Bl
Y3RvckRlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQpCisgICAgICAgIHNldEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkU3RhdGUoZmFsc2UpOworfQorCit2b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJv
clN0cmluZyopCit7CisgICAgaWYgKG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2V0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRTdGF0ZSh0
cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikKK3sKKyAgICBpZiAoIW1faXNUeXBlUHJvZmls
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZ0VuYWJsZWRTdGF0ZShmYWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGJvb2wgc2hvdWxk
RW5hYmxlVHlwZVByb2ZpbGluZykKK3sKKyAgICBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQgPSBz
aG91bGRFbmFibGVUeXBlUHJvZmlsaW5nOworCisgICAgVk0mIHZtID0gZ2xvYmFsVk0oKTsKKwor
ICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2FmZSB0byByZWNvbXBp
bGUsIHNpbmNlIHdlJ2xsIGVuZAorICAgIC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0IGlz
IGxpdmUgb24gdGhlIHN0YWNrLgorICAgIGlmICh2bS5lbnRyeVNjb3BlKSB7CisgICAgICAgIHZt
LmVudHJ5U2NvcGUtPnNldEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lcih0aGlzLAorICAgICAgICAg
ICAgWz1dIChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikgeworICAgICAgICAgICAgICAgIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyh2bSwgc2hvdWxkRW5hYmxlVHlwZVBy
b2ZpbGluZyk7IAorICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZQorICAgICAg
ICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHNob3VsZEVuYWJs
ZVR5cGVQcm9maWxpbmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAko
cmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDgg
QEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZQogcHVibGljOgogICAg
IHZpcnR1YWwgfkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24pIG92
ZXJyaWRlOworCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRl
IHsgbV9lbmFibGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nKikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5h
bDsKQEAgLTY3LDYgKzY5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2Jq
ZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBvdmVycmlk
ZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJv
clN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgbG9jYXRp
b25zLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmluZyopIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
ZyhFcnJvclN0cmluZyopIG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdT
ZXJ2ZXIoU2NyaXB0RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVi
dWdTZXJ2ZXIgPSBzY3JpcHREZWJ1Z1NlcnZlcjsgfQogCkBAIC04NCw5ICs4OCwxMSBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKGJvb2wp
OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAg
ICAgU2NyaXB0RGVidWdTZXJ2ZXIqIG1fc2NyaXB0RGVidWdTZXJ2ZXI7CiAgICAgYm9vbCBtX2Vu
YWJsZWQ7CisgICAgYm9vbCBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVB
Z2VudC5jcHAJKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTAgKzQ4LDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OmRp
ZENyZWEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUnVudGltZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIEpT
R2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKQordm9pZCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNv
biByZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1f
YmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKKyAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIFZNJiBKU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudDo6Z2xvYmFsVk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHJldmlzaW9uIDE3
MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGlt
ZS5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDE0IEBACiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0eXBlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6
ICJUeXBlRGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVlc3RlZCB2
YXJpYWJsZS4iIH0gfQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJSZXR1cm5zIGRldGFpbGVkIGluZm9ybXRhdGlvbiBvbiBnaXZlbiBmdW5jdGlvbi4iCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZUhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZXMgaGln
aCBmaWRlbGl0eSB0eXBlIHByb2ZpbGluZyBvbiB0aGUgVk0uIgorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgaGlnaCBmaWRlbGl0eSB0
eXBlIHByb2ZpbGluZyBvbiB0aGUgVk0uIgogICAgICAgICB9CiAgICAgXSwKICAgICAiZXZlbnRz
IjogWwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTcyNTQ4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBAIEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OlNTRTJDaGVja1MKICNp
bmNsdWRlICJBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0
eUxvZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKQEAgLTI2Nyw2ICsyNjgsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9pbmMpCiAg
ICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX2RpZF9jYWxsKQogICAgICAgICBERUZJTkVfT1Ao
b3BfcHJvZmlsZV93aWxsX2NhbGwpCisgICAgICAgIERFRklORV9PUChvcF9wcm9maWxlX3R5cGVz
X3dpdGhfaGlnaF9maWRlbGl0eSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfbmFtZV9zY29w
ZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hfd2l0aF9zY29wZSkKICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CkBAIC00OTgsNiArNTAwLDEwIEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGlu
ZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgLy8g
VGhpcyBlbnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgbW9zdCB1cCB0byBkYXRlIHR5cGUgaW5mb3Jt
YXRpb24gd2hlbiBwZXJmb3JtaW5nIHR5cGVjaGVjayBvcHRpbWl6YXRpb25zIGZvciBvcF9wcm9m
aWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eS4KKyAgICBpZiAobV92bS0+aXNQcm9maWxpbmdU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgbV92bS0+aGlnaEZpZGVsaXR5TG9nKCkt
PnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiIp
OwogICAgIAogICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3
IEpJVERpc2Fzc2VtYmxlcihtX2NvZGVCbG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3By
b2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9wcm9m
aWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHVzaF9uYW1lX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzA4LDYgKzEzMDgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3Ry
dQogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7Cisg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNs
dWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAg
LTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIK
KyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMzM4LDYgKzEzNDAsNjkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9faW5kZXhfc3RyaW5nKEluc3RydQogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUubG9jYXRpb247CisgICAgaW50IHZhbHVlVG9Qcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKKworICAgIC8v
IENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxlLCB0byBzZWUg
aWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgorICAgIC8vIFRoZXNlIHR5cGVjaGVj
a3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0LWJpdCBKU1ZhbHVlIHR5cGUg
Y2hlY2tzLgorICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5
cGVVbmRlZmluZWQpCisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSkpOworICAg
IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bGwp
CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpKTsKKyAgICBlbHNlIGlmIChjYWNoZWRU
eXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKSB7CisgICAgICAgIG1v
dmUocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH4xKSwgcmVnVDEp
OworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTY0KFZhbHVlRmFsc2UpKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24t
Pm1fbGFzdFNlZW5UeXBlID09IFR5cGVNYWNoaW5lSW50KQorICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKSk7CisgICAgZWxzZSBpZiAoY2Fj
aGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKQorICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKGVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIocmVnVDApKTsKKyAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcp
IHsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsK
KyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7
CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIH0KKworICAgIC8vIExvYWQgdGhl
IHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgorICAgIEhpZ2hGaWRlbGl0eUxvZyogY2FjaGVk
SGlnaEZpZGVsaXR5TG9nID0gbV92bS0+aGlnaEZpZGVsaXR5TG9nKCk7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNhY2hlZEhpZ2hGaWRlbGl0eUxvZyksIHJlZ1QyKTsKKyAgICAvLyBMb2FkIHRo
ZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSGln
aEZpZGVsaXR5TG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QxKTsKKworICAgIC8v
IFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KKyAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgp
KSk7CisKKyAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMg
YSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICBKdW1wIG5v
dENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBKdW1wIHNraXBJc0NlbGwgPSBqdW1wKCk7CisgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1Qx
LCBIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAg
c2tpcElzQ2VsbC5saW5rKHRoaXMpOworCisgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBv
biB0aGUgbG9nIGVudHJ5LgorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRp
b24pLCByZWdUMCk7CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVs
aXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworCisgICAgLy8gSW5jcmVtZW1l
bnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KEhpZ2hGaWRlbGl0eUxvZzo6TG9nRW50cnkpKSwgcmVnVDEpOworICAgIHN0b3JlNjQocmVnVDEs
IEFkZHJlc3MocmVnVDIsIEhpZ2hGaWRlbGl0eUxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkp
KTsKKyAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW1QdHIoY2FjaGVkSGlnaEZpZGVsaXR5TG9nLT5sb2dFbmRQdHIoKSkpOworICAgIC8v
IENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgorICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyk7CisgICAgc2tpcENsZWFy
TG9nLmxpbmsodGhpcyk7CisKKyAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKK30KKwogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2lu
Y2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUu
aCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oIgpAQCAtMTkyMSw2ICsxOTIyLDExIEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25Ub0luZGV4U3QKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
ZXhlYy0+dm0oKS5oaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiTG9n
IEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBiYXNlbGluZSBKSVQiKTsKK30KKwogfSAvLyBleHRl
cm4gIkMiCiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCkg
bmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMy
NCw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmkKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogCit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CisKIH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRp
b25MaW5rRm9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsMTUgKzU0MCw2
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgKICAgICBMTElOVF9S
RVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCi17Ci0gICAgTExJ
TlRfQkVHSU4oKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbMl0udS5sb2NhdGlv
bjsKLSAgICBKU1ZhbHVlIHZhbCA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwotICAgIHZtLmhp
Z2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxv
Y2F0aW9uKTsKLSAgICBMTElOVF9FTkRfSU1QTCgpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY2hlY2tfaGFzX2luc3RhbmNlKQogewogICAgIExMSU5UX0JFR0lOKCk7CkBA
IC0xMzc1LDggKzEzNjYsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29s
dmVfcwogICAgIExMSU5UX1JFVFVSTihKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIGV4ZWMtPnNjb3Bl
KCksIGlkZW50KSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVj
U3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgVk0mIHZtKQorTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQogeworICAgIExMSU5UX0JFR0lOKCk7CisKICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KHBjWzNdLnUub3BlcmFuZCk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0
Kj4oTExJTlRfT1AoMikuanNWYWx1ZSgpKTsKICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFu
ZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKQEAgLTEzODQsOCArMTM3Nyw4IEBAIHN0YXRpYyBKU1Zh
bHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29w
ZSk7CiAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkg
ewogICAgICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCkKLSAg
ICAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgICAgICBMTElOVF9SRVRVUk4oZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSkpOwor
ICAgICAgICBMTElOVF9SRVRVUk4oanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gQ292
ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBm
aXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxl
IHRpbWUuCkBAIC0xNDAyLDI3ICsxMzk1LDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29w
ZUNvbW1vbihFeGVjU3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBzbG90LmdldFZh
bHVlKGV4ZWMsIGlkZW50KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dl
dF9mcm9tX3Njb3BlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IGdldEZyb21TY29wZUNvbW1vbihleGVjLCBwYywgdm0pOwotICAgIExMSU5UX1JFVFVSTih2YWx1
ZSk7CisgICAgTExJTlRfUkVUVVJOKHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpKTsKIH0KIAot
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmls
ZSkKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpCiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4
ZWMsIHBjLCB2bSk7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzhdLnUubG9jYXRp
b247Ci0gICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxv
Y2F0aW9uKHZhbHVlLCBsb2NhdGlvbik7Ci0gICAgTExJTlRfUkVUVVJOKHZhbHVlKTsKLX0KIAot
c3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1
Y3Rpb24qIHBjKQotewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIo
cGNbMl0udS5vcGVyYW5kKTsKICAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihMTElOVF9PUCgxKS5qc1ZhbHVlKCkpOwpAQCAtMTQzMCwzNSArMTQwOSwxMyBAQCBzdGF0aWMg
SlNPYmplY3QqIHB1dFRvU2NvcGVDb21tb24oRXhlY1N0CiAgICAgUmVzb2x2ZU1vZGVBbmRUeXBl
IG1vZGVBbmRUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAKICAg
ICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhh
c1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVVuZGVmaW5lZFZh
cmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOworICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVVbmRl
ZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChzY29wZSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgc2NvcGUtPm1ldGhv
ZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAg
ICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxv
Y2ssIHBjLCBzY29wZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpCi17Ci0g
ICAgTExJTlRfQkVHSU4oKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBwdXRUb1Njb3BlQ29tbW9u
KGV4ZWMsIHBjKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVycm9yKTsK
LSAgICBMTElOVF9FTkQoKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
dF90b19zY29wZV93aXRoX3Byb2ZpbGUpCi17Ci0gICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGlu
c3RydWN0aW9uIGlzIHRoZSBzYW1lIGFzIHB1dF90b19zY29wZSB3aXRoIGEgVHlwZUxvY2F0aW9u
IGFwcGVuZGVkOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJl
c29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCi0gICAg
TExJTlRfQkVHSU4oKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBwdXRUb1Njb3BlQ29tbW9uKGV4
ZWMsIHBjKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVycm9yKTsKLSAg
ICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gcGNbN10udS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVl
IHZhbCA9IExMSU5UX09QX0MoMykuanNWYWx1ZSgpOwotICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygp
LT5yZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9uKTsKICAgICBM
TElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTAgKzExOCw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHIKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbik7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZSk7Ci1MTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSk7Ci1MTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVz
X3dpdGhfaGlnaF9maWRlbGl0eSk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lO
VEVSTkFMOwogI2lmICFFTkFCTEUoSklUKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5B
TDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTM4MSwx
NSArMTM4MSw1IEBAIF9sbGludF9vcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgZGlzcGF0
Y2goNSkKIAogX2xsaW50X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OgotICAg
IGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KQotICAgIGRpc3BhdGNoKDQpCi0KLV9sbGludF9vcF9wdXRfdG9fc2NvcGVfd2l0aF9w
cm9maWxlOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKQotICAgIGRpc3BhdGNoKDgpCi0KLV9s
bGludF9vcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVjdXRpb24o
KQotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhf
cHJvZmlsZSkKLSAgICBkaXNwYXRjaCg5KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQorICAgIGRpc3BhdGNoKDYpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDE3
MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2Rl
Q2FjaGU6OmdldEdsbwogewogICAgIFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNlQ29kZUtleShz
b3VyY2UsIFN0cmluZygpLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVU
eXBlLCBzdHJpY3RuZXNzKTsKICAgICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX3NvdXJjZUNvZGUuYWRkKGtleSwgU291cmNlQ29kZVZhbHVlKCkpOwotICAgIGJvb2wgY2Fu
Q2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFBy
b2ZpbGVyT2ZmOworICAgIGJvb2wgY2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJP
ZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT2ZmICYmICF2bS5pc1Byb2ZpbGluZ1R5cGVz
V2l0aEhpZ2hGaWRlbGl0eSgpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgY2Fu
Q2FjaGUpIHsKICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9j
ayA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmNlbGwuZ2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmly
c3RMaW5lKCkgKyB1bmxpbmtlZENvZGVCbG9jay0+Zmlyc3RMaW5lKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFcnJv
ckhhbmRsaW5nU2NvcGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25GdXp6LmgiCiAjaW5jbHVkZSAi
R2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAi
SG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiSklULmgiCkBAIC02MzYsNCArNjM3LDEzIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90
b19pbmRleF9zdHJpbmcKICAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBPUCgyKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKIH0KIAorU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQor
eworICAgIEJFR0lOKCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzJdLnUubG9j
YXRpb247CisgICAgSlNWYWx1ZSB2YWwgPSBPUF9DKDEpLmpzVmFsdWUoKTsKKyAgICB2bS5oaWdo
RmlkZWxpdHlMb2coKS0+cmVjb3JkVHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsLCBsb2Nh
dGlvbik7CisgICAgRU5EKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9u
IDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9nZXRfc3RydQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlMb2cuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw0OSArNDMs
NDcgQEAgdm9pZCBIaWdoRmlkZWxpdHlMb2c6OmluaXRpYWxpemVIaWdoRmlkZQogICAgIEFTU0VS
VCghbV9sb2dTdGFydFB0cik7CiAgICAgbV9oaWdoRmlkZWxpdHlMb2dTaXplID0gNTAwMDA7CiAg
ICAgbV9sb2dTdGFydFB0ciA9IG5ldyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwot
ICAgIG1fbmV4dEJ1ZmZlciA9IG5ldyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwot
ICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgPSBtX2xv
Z1N0YXJ0UHRyOworICAgIG1fbG9nRW5kUHRyID0gbV9sb2dTdGFydFB0ciArIG1faGlnaEZpZGVs
aXR5TG9nU2l6ZTsKIH0KIAogSGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKIHsK
ICAgICBkZWxldGVbXSBtX2xvZ1N0YXJ0UHRyOwotICAgIGRlbGV0ZVtdIG1fbmV4dEJ1ZmZlcjsK
IH0KIAogdm9pZCBIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3RyaW5n
IHJlYXNvbikKIHsKLSAgICBpZiAoIW1fY3VycmVudE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCBy
ZWFzb24sIiciKTsKIAogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CiAgICAg
TG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlE
LCBSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBzZWVuU2hhcGVzOwotICAgIHNpemVfdCBpID0gMDsK
LSAgICB3aGlsZSAoaSA8IG1fY3VycmVudE9mZnNldCkgeworICAgIHdoaWxlIChlbnRyeSAhPSBt
X2N1cnJlbnRMb2dFbnRyeVB0cikgewogICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9IGVudHJ5LT5z
dHJ1Y3R1cmVJRDsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZTsgCisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBlbnRyeS0+dmFsdWU7CiAgICAgICAgIGlmIChpZCkgewogICAg
ICAgICAgICAgYXV0byBpdGVyID0gc2VlblNoYXBlcy5maW5kKGlkKTsKICAgICAgICAgICAgIGlm
IChpdGVyID09IHNlZW5TaGFwZXMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBzaGFwZSA9IEhl
YXA6OmhlYXAoZW50cnktPnZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChl
bnRyeS0+c3RydWN0dXJlSUQpLT50b1N0cnVjdHVyZVNoYXBlKGVudHJ5LT52YWx1ZSk7CisgICAg
ICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpoZWFwKHZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJl
SURUYWJsZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50b1N0cnVjdHVyZVNoYXBlKHZhbHVl
KTsKICAgICAgICAgICAgICAgICBzZWVuU2hhcGVzLnNldChpZCwgc2hhcGUpOwotICAgICAgICAg
ICAgfSBlbHNlIAorICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgc2hhcGUgPSBp
dGVyLT52YWx1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChlbnRyeS0+bG9jYXRpb24tPm1f
Z2xvYmFsVHlwZVNldCkKLSAgICAgICAgICAgIGVudHJ5LT5sb2NhdGlvbi0+bV9nbG9iYWxUeXBl
U2V0LT5hZGRUeXBlRm9yVmFsdWUoZW50cnktPnZhbHVlLCBzaGFwZSwgaWQpOwotICAgICAgICBl
bnRyeS0+bG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUoZW50
cnktPnZhbHVlLCBzaGFwZSwgaWQpOworICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gVHlwZVNl
dDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFR5cGVMb2NhdGlvbiog
bG9jYXRpb24gPSBlbnRyeS0+bG9jYXRpb247CisgICAgICAgIGxvY2F0aW9uLT5tX2xhc3RTZWVu
VHlwZSA9IHR5cGU7CisgICAgICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQorICAg
ICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWRkVHlwZUluZm9ybWF0aW9uKHR5
cGUsIHNoYXBlLCBpZCk7CisgICAgICAgIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+
YWRkVHlwZUluZm9ybWF0aW9uKHR5cGUsIHNoYXBlLCBpZCk7CiAKICAgICAgICAgZW50cnkrKzsK
LSAgICAgICAgaSsrOwogICAgIH0KIAotICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgbV9j
dXJyZW50TG9nRW50cnlQdHIgPSBtX2xvZ1N0YXJ0UHRyOwogCiAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJldmlzaW9uIDE3
MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb247IAogICAgICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKKworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVy
ZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCBzdHJ1Y3R1cmVJ
RCk7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2YWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihMb2dFbnRyeSwgdmFsdWUpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbG9jYXRpb25PZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9nRW50cnksIGxv
Y2F0aW9uKTsgfQogICAgIH07CiAKKwogICAgIEhpZ2hGaWRlbGl0eUxvZygpCiAgICAgICAgIDog
bV9sb2dTdGFydFB0cigwKQogICAgIHsKQEAgLTU5LDM3ICs2NCwyOSBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKEpTVmFs
dWUgdmFsdWUsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9sb2dTdGFydFB0cik7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQgPCBtX2hpZ2hG
aWRlbGl0eUxvZ1NpemUpOwotICAgIAotICAgICAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0
YXJ0UHRyICsgbV9jdXJyZW50T2Zmc2V0OwotICAgIAotICAgICAgICBlbnRyeS0+bG9jYXRpb24g
PSBsb2NhdGlvbjsKLSAgICAgICAgZW50cnktPnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGVudHJ5
LT5zdHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmVJRCgpIDogMCk7CisKKyAgICAgICAgbV9jdXJyZW50TG9nRW50cnlQdHItPmxvY2F0aW9uID0g
bG9jYXRpb247CisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyLT52YWx1ZSA9IHZhbHVlOwor
ICAgICAgICBtX2N1cnJlbnRMb2dFbnRyeVB0ci0+c3RydWN0dXJlSUQgPSAodmFsdWUuaXNDZWxs
KCkgPyB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA6IDApOwogICAgIAotICAgICAgICBt
X2N1cnJlbnRPZmZzZXQgKz0gMTsKLSAgICAgICAgaWYgKG1fY3VycmVudE9mZnNldCA9PSBtX2hp
Z2hGaWRlbGl0eUxvZ1NpemUpCisgICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyICs9IDE7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRMb2dFbnRyeVB0ciA9PSBtX2xvZ0VuZFB0cikp
CiAgICAgICAgICAgICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJMb2cgRnVsbCIpOwogICAgIH0K
IAogICAgIHZvaWQgcHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcpOworICAgIExvZ0VudHJ5
KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIaWdo
RmlkZWxpdHlMb2csIG1fbG9nU3RhcnRQdHIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJy
ZW50TG9nRW50cnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGlnaEZpZGVsaXR5
TG9nLCBtX2N1cnJlbnRMb2dFbnRyeVB0cik7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemVIaWdoRmlkZWxpdHlMb2coKTsKIAogICAgIHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5TG9n
U2l6ZTsKLSAgICBzaXplX3QgbV9jdXJyZW50T2Zmc2V0OwogICAgIExvZ0VudHJ5KiBtX2xvZ1N0
YXJ0UHRyOwotICAgIExvZ0VudHJ5KiBtX25leHRCdWZmZXI7Ci0KLSAgICBCeXRlU3BpbkxvY2sg
bV9sb2NrOwotCi0gICAgc3RydWN0IFRocmVhZERhdGEgewotICAgICAgICBwdWJsaWM6Ci0gICAg
ICAgIExvZ0VudHJ5KiBtX3Byb2Nlc3NMb2dQdHI7Ci0gICAgICAgIHNpemVfdCBtX3Byb2NjZXNz
TG9nVG9PZmZzZXQ7Ci0gICAgICAgIEJ5dGVTcGluTG9ja2VyKiBtX2xvY2tlcjsKLSAgICB9Owor
ICAgIExvZ0VudHJ5KiBtX2N1cnJlbnRMb2dFbnRyeVB0cjsKKyAgICBMb2dFbnRyeSogbV9sb2dF
bmRQdHI7CiB9OwogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3Bw
CShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw3IEBA
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogdm9pZCBIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXI6OmxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiogbG9jYXRp
b24pCiB7Ci0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbG9j
YXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQg
PyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4KLSAgICAgICAgOiBs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQg
PyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudAotICAgICAgICA6IFR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CisgICAgVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBI
aWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
RnVuY3Rpb25SZXR1cm4gOiBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsOwogCiAg
ICAgZGF0YUxvZ0YoIltTdGFydCwgRW5kXTo6WyV1LCAldV1cbiIsIGxvY2F0aW9uLT5tX2Rpdm90
U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKIApAQCAtNDYsOSArNDQsNyBAQCB2b2lkIEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGCiAgICAgZWxzZQogICAgICAgICBkYXRh
TG9nKCJcdFx0W0VudHJ5IElTIE5PVCBpbiBzeXN0ZW1dXG4iKTsKIAotICAgIGRhdGFMb2coIlx0
XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iCi0gICAgICAgIDogbG9jYXRpb24tPm1fZ2xv
YmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gIltUaGlzIFN0YXRl
bWVudF0iCi0gICAgICAgIDogIltOb3JtYWwgU3RhdGVtZW50XSIsICJcbiIpOworICAgIGRhdGFM
b2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJl
dHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iIDogIltOb3JtYWwgU3RhdGVtZW50
XSIsICJcbiIpOwogCiAgICAgZGF0YUxvZygiXHRcdCNMb2NhbCNcblx0XHQiLCBsb2NhdGlvbi0+
bV9pbnN0cnVjdGlvblR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIp
LCAiXG4iKTsKICAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKQEAgLTkxLDEwICs4
Nyw3IEBAIHN0YXRpYyBib29sIGRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW8KICAgICBpZiAo
ZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4g
JiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0
ZW1lbnQpICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoZGVzY3JpcHRvciA9PSBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9n
bG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZp
ZGVsaXR5UmV0dXJuU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0g
SGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAorICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCAhPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQpICAKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAkocmV2aXNpb24g
MTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGVudW0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciB7CiAgICAgVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCA9IDEsCi0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvclRoaXNTdGF0ZW1lbnQgPSAyLAotICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JGdW5jdGlvblJldHVybiA9IDMKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVu
Y3Rpb25SZXR1cm4gPSAyCiB9OwogCiBjbGFzcyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAko
cmV2aXNpb24gMTcyNTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTEgKzEwMyw2IEBAIFN5bWJvbFRhYmxl
OjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgLCBtX2NhcHR1cmVFbmQoMCkKICAgICAsIG1fZnVu
Y3Rpb25FbnRlcmVkT25jZShDbGVhcldhdGNocG9pbnQpCiB7Ci0gICAgaWYgKHZtLmlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgbV91bmlxdWVJRE1hcCA9IHN0
ZDo6bWFrZV91bmlxdWU8VW5pcXVlSURNYXA+KCk7Ci0gICAgICAgIG1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlclRvVmFyaWFibGVNYXA+KCk7Ci0gICAg
ICAgIG1fdW5pcXVlVHlwZVNldE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVlVHlwZVNldE1h
cD4oKTsKLSAgICB9CiB9CiAKIFN5bWJvbFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7IH0KQEAgLTE2
NCw3MCArMTU5LDEwNCBAQCBTeW1ib2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWRO
CiAgICAgICAgICAgICByZXN1bHQtPm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50
c1tpXTsKICAgICB9CiAKLSAgICBpZiAobV91bmlxdWVJRE1hcCAmJiByZXN1bHQtPm1fdW5pcXVl
SURNYXApIHsKKyAgICBpZiAobV90eXBlUHJvZmlsaW5nUmFyZURhdGEpIHsKKyAgICAgICAgcmVz
dWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2Zp
bGluZ1JhcmVEYXRhPigpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1f
dW5pcXVlSURNYXAtPmJlZ2luKCk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IG1fdW5pcXVlSURN
YXAtPmVuZCgpOworICAgICAgICAgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURh
dGEtPm1fdW5pcXVlSURNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBl
UHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICByZXN1bHQtPm1fdW5pcXVl
SURNYXAtPnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQtPm1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNldChpdGVyLT5rZXks
IGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8g
aXRlciA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5iZWdpbigpOwotICAgICAgICAgICAgYXV0
byBlbmQgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRv
IGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAu
YmVnaW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEt
Pm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5tX3JlZ2lzdGVyVG9WYXJp
YWJsZU1hcC0+c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJl
c3VsdC0+bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLnNl
dChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGF1dG8gaXRlciA9IG1fdW5pcXVlVHlwZVNldE1hcC0+YmVnaW4oKTsKLSAgICAgICAg
ICAgIGF1dG8gZW5kID0gbV91bmlxdWVUeXBlU2V0TWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1
dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuYmVn
aW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1f
dW5pcXVlVHlwZVNldE1hcC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+bV91bmlxdWVUeXBlU2V0TWFwLT5zZXQo
aXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5tX3R5cGVQ
cm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLnNldChpdGVyLT5rZXksIGl0ZXIt
PnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK3ZvaWQgU3ltYm9sVGFibGU6OnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKQoreworICAgIGlmIChtX3R5cGVQcm9maWxpbmdS
YXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKKworICAgIGZvciAo
YXV0byBpdGVyID0gbV9tYXAuYmVnaW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURN
YXAuc2V0KGl0ZXItPmtleSwgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pOwor
ICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAu
c2V0KGl0ZXItPnZhbHVlLmdldEluZGV4KCksIGl0ZXItPmtleSk7CisgICAgfQorfQorCiBHbG9i
YWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSkKIHsKLSAgICBhdXRvIGl0
ZXIgPSBtX3VuaXF1ZUlETWFwLT5maW5kKGtleSk7Ci0gICAgYXV0byBlbmQgPSBtX3VuaXF1ZUlE
TWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRlciA9
IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmZpbmQoa2V5KTsKKyAgICBh
dXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmVuZCgpOwor
ICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0eU5vR2xvYmFs
SURFeGlzdHM7CiAKLSAgICBHbG9iYWxWYXJpYWJsZUlEJiBpZCA9IGl0ZXItPnZhbHVlOworICAg
IEdsb2JhbFZhcmlhYmxlSUQgaWQgPSBpdGVyLT52YWx1ZTsKICAgICBpZiAoaWQgPT0gSGlnaEZp
ZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pIHsKICAgICAgICAgaWQgPSB2bS5nZXROZXh0
VW5pcXVlVmFyaWFibGVJRCgpOwotICAgICAgICBtX3VuaXF1ZVR5cGVTZXRNYXAtPnNldChrZXks
IFR5cGVTZXQ6OmNyZWF0ZSgpKTsgLy9tYWtlIGEgbmV3IGdsb2JhbCB0eXBlc2V0IGZvciB0aGUg
SUQKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGtl
eSwgaWQpOworICAgICAgICBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0
TWFwLnNldChrZXksIFR5cGVTZXQ6OmNyZWF0ZSgpKTsgLy8gTWFrZSBhIG5ldyBnbG9iYWwgdHlw
ZXNldCBmb3IgdGhpcyBjb3JyZXNwb25kaW5nIElELgogICAgIH0KLSAgICAgICAgIAorCiAgICAg
cmV0dXJuIGlkOwogfQogCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlxdWVJREZv
clJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVy
SW5kZXgsIFZNJiB2bSkKIHsKLSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1h
cC0+ZmluZChyZWdpc3RlckluZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRl
ciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5maW5k
KHJlZ2lzdGVySW5kZXgpOworICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEt
Pm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CisKICAgICByZXR1cm4g
dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAK
IFJlZlB0cjxUeXBlU2V0PiBTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2
bSkKIHsKLSAgICB1bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwgcmVnaXN0ZXJJbmRleCwgdm0p
OyAvL2Vuc3VyZSBpdCdzIGNyZWF0ZWQKLSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJp
YWJsZU1hcC0+ZmluZChyZWdpc3RlckluZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJU
b1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIHVu
aXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCByZWdpc3RlckluZGV4LCB2bSk7IC8vIExhemlseSBj
cmVhdGUgdGhlIFR5cGVTZXQgaWYgbmVjZXNzYXJ5LgorCisgICAgYXV0byBpdGVyID0gbV90eXBl
UHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQocmVnaXN0ZXJJ
bmRleCk7CisgICAgYXV0byBlbmQgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3Rl
clRvVmFyaWFibGVNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBnbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2Vy
LCBpdGVyLT52YWx1ZS5nZXQoKSwgdm0pOwogfQogCiBSZWZQdHI8VHlwZVNldD4gU3ltYm9sVGFi
bGU6Omdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKQogewotICAgIHVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBrZXksIHZtKTsKLSAgICByZXR1cm4gbV91bmlxdWVUeXBlU2V0TWFwLT5maW5k
KGtleSktPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRh
KTsKKworICAgIHVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsgLy8gTGF6aWx5
IGNyZWF0ZSB0aGUgVHlwZVNldCBpZiBuZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLmZpbmQoa2V5KTsKKyAgICBh
dXRvIGVuZCA9IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuZW5k
KCk7CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBpdGVyLT52YWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE3MjU0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxNywxMiArNDE3LDYgQEAgcHVibGljOgogICAgIAogICAgIE1hcDo6QWRk
UmVzdWx0IGFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBj
b25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIGlmIChtX3VuaXF1
ZUlETWFwKSB7Ci0gICAgICAgICAgICAvLyBVc2UgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2Ug
bmVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIElELiBCZWNhdXNlIFZNIGlzIGluIGNoYXJnZSBvZiBj
cmVhdGluZyB1bmlxdWVJRHMsIAotICAgICAgICAgICAgLy8gd2hlbiB1bmlxdWVJRCgpIGlzIGNh
bGxlZCwgd2UgY2hlY2sgdGhpcyBmbGFnIHRvIHNlZSBpZiB1bmlxdWVJRCBjcmVhdGlvbiBpcyBu
ZWNlc3NhcnkuCi0gICAgICAgICAgICBtX3VuaXF1ZUlETWFwLT5zZXQoa2V5LCBIaWdoRmlkZWxp
dHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbik7IAotICAgICAgICAgICAgbV9yZWdpc3RlclRvVmFy
aWFibGVNYXAtPnNldChlbnRyeS5nZXRJbmRleCgpLCBrZXkpOwotICAgICAgICB9CiAgICAgICAg
IHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDM0LDEwICs0
MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkm
IGVudHJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5pcXVlSURNYXApIHsKLSAgICAgICAgICAg
IG1fdW5pcXVlSURNYXAtPnNldChrZXksIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0
aW9uKTsgCi0gICAgICAgICAgICBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGVudHJ5Lmdl
dEluZGV4KCksIGtleSk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fbWFwLnNldChrZXks
IGVudHJ5KTsKICAgICB9CiAgICAgCkBAIC00ODksNiArNDc5LDggQEAgcHVibGljOgogICAgIAog
ICAgIFN5bWJvbFRhYmxlKiBjbG9uZUNhcHR1cmVkTmFtZXMoVk0mKTsKIAorICAgIHZvaWQgcHJl
cGFyZUZvckhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYpOworCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKQEAgLTUxMyw5ICs1MDUsMTIgQEAgcHJp
dmF0ZToKICAgICB+U3ltYm9sVGFibGUoKTsKIAogICAgIE1hcCBtX21hcDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VW5pcXVlSURNYXA+IG1fdW5pcXVlSURNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlZ2lzdGVyVG9WYXJpYWJsZU1hcD4gbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFVuaXF1ZVR5cGVTZXRNYXA+IG1fdW5pcXVlVHlwZVNldE1hcDsKKyAgICBz
dHJ1Y3QgVHlwZVByb2ZpbGluZ1JhcmVEYXRhIHsKKyAgICAgICAgVW5pcXVlSURNYXAgbV91bmlx
dWVJRE1hcDsKKyAgICAgICAgUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0ZXJUb1Zhcmlh
YmxlTWFwOworICAgICAgICBVbmlxdWVUeXBlU2V0TWFwIG1fdW5pcXVlVHlwZVNldE1hcDsKKyAg
ICB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+IG1fdHlwZVBy
b2ZpbGluZ1JhcmVEYXRhOwogCiAgICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
OwogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE3
MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdGQ6OnBhaXI8VHlwZUxvY2F0
aW9uKiwgYm9vbD4gVHlwZUxvY2F0CiAKICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBmYWxzZTsK
ICAgICBpZiAobV9sb2NhdGlvbk1hcC5maW5kKGtleSkgPT0gbV9sb2NhdGlvbk1hcC5lbmQoKSkg
ewotICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gdm0tPm5leHRMb2NhdGlvbigpOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gdm0tPm5leHRUeXBlTG9jYXRpb24oKTsK
ICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IGdsb2JhbFZhcmlhYmxlSUQ7
CiAgICAgICAgIGxvY2F0aW9uLT5tX3NvdXJjZUlEID0gc291cmNlSUQ7CiAgICAgICAgIGxvY2F0
aW9uLT5tX2Rpdm90U3RhcnQgPSBzdGFydDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTcgKzYyLDE2
IEBAIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAgICBlbHNlIGlm
ICh2LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldCA9IFR5cGVPYmplY3Q7CiAgICAgZWxzZQotICAg
ICAgICBDUkFTSCgpOworICAgICAgICByZXQgPSBUeXBlTm90aGluZzsKIAogICAgIHJldHVybiBy
ZXQ7CiB9CiAKLXZvaWQgVHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKK3ZvaWQgVHlwZVNl
dDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWVUeXBlIHR5cGUsIFBhc3NSZWZQdHI8U3RydWN0
dXJlU2hhcGU+IHNoYXBlLCBTdHJ1Y3R1cmVJRCBpZCkgCiB7Ci0gICAgUnVudGltZVR5cGUgdCA9
IGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUodik7Ci0gICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBl
cyB8IHQ7CisgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHR5cGU7CiAKLSAgICBpZiAo
aWQgJiYgc2hhcGUgJiYgIXYuaXNTdHJpbmcoKSAmJiAhdi5pc0Z1bmN0aW9uKCkpIHsKKyAgICBp
ZiAoaWQgJiYgc2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CiAgICAgICAgIEFTU0VSVCht
X3N0cnVjdHVyZUlESGlzdG9yeS5pc1ZhbGlkS2V5KGlkKSk7CiAgICAgICAgIGF1dG8gaXRlciA9
IG1fc3RydWN0dXJlSURIaXN0b3J5LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0
cnVjdHVyZUlESGlzdG9yeS5lbmQoKSkgewpAQCAtMjE4LDggKzIxNyw2IEBAIFN0cmluZyBUeXBl
U2V0OjpkaXNwbGF5TmFtZSgpIGNvbnN0CiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+IFR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0
CiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHNl
ZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAg
ICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlRnVuY3Rpb24pCi0gICAgICAgICBzZWVuLT5hZGRJdGVt
KCJGdW5jdGlvbiIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpCiAgICAg
ICAgICBzZWVuLT5hZGRJdGVtKCJVbmRlZmluZWQiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBU
eXBlTnVsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJl
dmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBjbGFzcyBUeXBlU2V0IDogcHVibGlj
IFJlZkNvdW50ZWQ8VHlwZVNlCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZVNl
dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFR5cGVTZXQpOyB9CiAgICAgVHlwZVNl
dCgpOwotICAgIHZvaWQgYWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKKyAgICB2b2lkIGFkZFR5cGVJbmZvcm1hdGlvbihS
dW50aW1lVHlwZSwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKICAg
ICBzdGF0aWMgUnVudGltZVR5cGUgZ2V0UnVudGltZVR5cGVGb3JWYWx1ZShKU1ZhbHVlKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CiAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2VuYWJsZWRQcm9maWxlcihudWxscHRy
KQogICAgICwgbV9idWlsdGluRXhlY3V0YWJsZXMoQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGUo
KnRoaXMpKQogICAgICwgbV9uZXh0VW5pcXVlVmFyaWFibGVJRCgxKQorICAgICwgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50KDApCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBu
ZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogICAgIFN0YWNrQm91bmRzIHN0YWNrID0gd3RmVGhyZWFk
RGF0YSgpLnN0YWNrKCk7CkBAIC0yODMsMTEgKzI4NCw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAvLyB3b24ndCB1c2UgdGhpcy4KICAgICBtX3R5cGVk
QXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KCkpOwogCi0gICAgLy8gRklYTUU6IGNvbmRpdGlvbmFsbHkgYWxsb2NhdGUgdGhpcyBzdHVmZiBi
YXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zcGVjdG9yIGlzIHJ1bm5pbmcgT1IgdGhpcyBm
bGFnIGlzIGVuYWJsZWQgKG5vdCBqdXN0IGlmIHRoZSBmbGFnIGlzIGVuYWJsZWQpLgotICAgIGlm
IChPcHRpb25zOjpwcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcj4oKTsKLSAgICAgICAgbV9oaWdoRmlkZWxpdHlMb2cgPSBzdGQ6Om1ha2VfdW5p
cXVlPEhpZ2hGaWRlbGl0eUxvZz4oKTsKLSAgICB9CisgICAgaWYgKE9wdGlvbnM6OnByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZygpOwogfQogCiBWTTo6flZNKCkKQEAgLTg1OCw2ICs4NTYsNDMgQEAgdm9pZCBWTTo6
c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAorVHlwZUxvY2F0aW9u
KiBWTTo6bmV4dFR5cGVMb2NhdGlvbigpIAoreyAKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1fdHlw
ZUxvY2F0aW9uSW5mbyk7CisKKyAgICByZXR1cm4gbV90eXBlTG9jYXRpb25JbmZvLT5hZGQoKTsg
Cit9CisKK2Jvb2wgVk06OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKQoreworICAg
IGJvb2wgbmVlZHNUb1JlY29tcGlsZSA9IGZhbHNlOworICAgIGlmICghbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nRW5hYmxlZENvdW50KSB7CisgICAgICAgIG1faGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+KCk7Cisg
ICAgICAgIG1faGlnaEZpZGVsaXR5TG9nID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlM
b2c+KCk7CisgICAgICAgIG1fdHlwZUxvY2F0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFn
PFR5cGVMb2NhdGlvbj4+KCk7CisgICAgICAgIG5lZWRzVG9SZWNvbXBpbGUgPSB0cnVlOworICAg
IH0KKyAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQrKzsKKworICAg
IHJldHVybiBuZWVkc1RvUmVjb21waWxlOworfQorCitib29sIFZNOjpkaXNhYmxlSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGluZygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nRW5hYmxlZENvdW50ID4gMCk7CisKKyAgICBib29sIG5lZWRzVG9SZWNvbXBp
bGUgPSBmYWxzZTsKKyAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQt
LTsKKyAgICBpZiAoIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRDb3VudCkgewor
ICAgICAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5yZXNldChudWxscHRyKTsKKyAgICAg
ICAgbV9oaWdoRmlkZWxpdHlMb2cucmVzZXQobnVsbHB0cik7CisgICAgICAgIG1fdHlwZUxvY2F0
aW9uSW5mby5yZXNldChudWxscHRyKTsKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIG5lZWRzVG9SZWNvbXBpbGU7Cit9CisKIHZvaWQgVk06OmR1
bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpCiB7CiAgICAgaWYgKCFpc1Byb2ZpbGluZ1R5
cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQpAQCAtODY1LDcgKzkwMCw3IEBAIHZvaWQgVk06OmR1bXBI
aWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygKIAogICAgIGhpZ2hGaWRlbGl0eUxvZygpLT5wcm9j
ZXNzSGlnaEZpZGVsaXR5TG9nKCJWTSBEdW1wIFR5cGVzIik7CiAgICAgSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyKiBwcm9maWxlciA9IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOwot
ICAgIGZvciAoQmFnPFR5cGVMb2NhdGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xvY2F0aW9uSW5m
by5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgIGZvciAoQmFnPFR5cGVMb2NhdGlvbj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3R5cGVMb2NhdGlvbkluZm8tPmJlZ2luKCk7ICEhaXRlcjsgKytp
dGVyKSB7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSAqaXRlcjsKICAgICAgICAg
cHJvZmlsZXItPmxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKGxvY2F0aW9uKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0
OTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVp
bHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWlsdGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0K
IAogICAgICAgICBib29sIGlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkgeyByZXR1
cm4gISFtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjsgfQorICAgICAgICBib29sIGVuYWJsZUhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICAgICAgYm9vbCBkaXNhYmxlSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGluZygpOwogICAgICAgICBIaWdoRmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0
eUxvZygpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5TG9nLmdldCgpOyB9CiAgICAgICAgIEhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlciogaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4g
bV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuZ2V0KCk7IH0KLSAgICAgICAgVHlwZUxvY2F0aW9u
KiBuZXh0TG9jYXRpb24oKSB7IHJldHVybiBtX2xvY2F0aW9uSW5mby5hZGQoKTsgfSAvL1RPRE86
IHBvc3NpYmxlIG9wdG1pemF0aW9uOiB3aGVuIGNvZGVibG9ja3MgZGllLCByZXBvcnQgd2hpY2gg
bG9jYXRpb25zIGFyZSBubyBsb25nZXIgYmVpbmcgY2hhbmdlZCBzbyB3ZSBkb24ndCB3YWxrIG92
ZXIgdGhlbQorICAgICAgICBUeXBlTG9jYXRpb24qIG5leHRUeXBlTG9jYXRpb24oKTsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wSGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMo
KTsKICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpIHsg
cmV0dXJuIG1fbmV4dFVuaXF1ZVZhcmlhYmxlSUQrKzsgfQogCkBAIC01NTMsNyArNTU1LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXI+IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOwogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SGlnaEZpZGVsaXR5TG9nPiBtX2hpZ2hGaWRlbGl0eUxvZzsKICAgICAgICAgR2xvYmFs
VmFyaWFibGVJRCBtX25leHRVbmlxdWVWYXJpYWJsZUlEOwotICAgICAgICBCYWc8VHlwZUxvY2F0
aW9uPiBtX2xvY2F0aW9uSW5mbzsKKyAgICAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRW5hYmxlZENvdW50OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFnPFR5cGVM
b2NhdGlvbj4+IG1fdHlwZUxvY2F0aW9uSW5mbzsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzI1NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNC0wOC0x
MyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBoaWdo
IGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NDIzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFnZVJ1bnRpbWVB
Z2VudCBhbmQgV29ya2VyUnVudGltZUFnZW50IG5vdyBjYWxsIHRoZWlyIHN1cGVyIAorICAgICAg
ICBjbGFzcydzIChJbnNwZWN0b3JSdW50aW1lQWdlbnQpIGltcGxlbWVudGF0aW9uIG9mIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kCisgICAgICAgIHRvIGdpdmUgSW5zcGVjdG9yUnVudGlt
ZUFnZW50IGEgY2hhbmNlIHRvIHJlY29tcGlsZSBhbGwgSmF2YVNjcmlwdAorICAgICAgICBmdW5j
dGlvbnMsIGlmIG5lY2Vzc2FyeSwgZm9yIHR5cGUgcHJvZmlsaW5nLgorCisgICAgICAgICogaW5z
cGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRp
bWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisKIDIwMTQtMDgtMTMg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxl
IENTU19TQ1JPTExfU05BUCBmb3IgaU9TCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZVJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lvbiAxNzI1NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDEzICs2NywxNSBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBQYWdlUnVudGlt
ZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0
UmVhc29uKQordm9pZCBQYWdlUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwog
CiAgICAgU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIGRpc2FibGUoJmVycm9yU3RyaW5nKTsKKwor
ICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
cmVhc29uKTsKIH0KIAogdm9pZCBQYWdlUnVudGltZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRp
bWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
clJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MjU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1
OSwxMSBAQCB2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlCiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBXb3JrZXJSdW50aW1lQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFz
b24pCit2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOworCisgICAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChyZWFzb24pOwogfQogCiBJbmplY3RlZFNjcmlwdCBXb3JrZXJS
dW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyogZXJyb3IsIGNv
bnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236605</attachid>
            <date>2014-08-14 11:46:06 -0700</date>
            <delta_ts>2014-08-14 16:59:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>99347</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNC0wOC0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmlsaW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRp
c2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZXJnZWQgb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSBhbmQgb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlIGludG8KKyAgICAgICAgICBvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGln
aF9maWRlbGl0eSBieSBhZGRpbmcgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBvcGNvZGUuCisgICAg
ICAgIC0gQWx0ZXJlZCBTeW1ib2xUYWJsZSB0byB1c2UgbGVzcyBtZW1vcnkgYnkgYWRkaW5nIGEg
cmFyZSBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgdHlwZSBwcm9maWxpbmcuCisgICAg
ICAgIC0gQ3JlYXRlZCBhbiBpbnRlcmZhY2UgdG8gdHVybiBvbiBhbmQgb2ZmIHR5cGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYgorICAgICAgICAgIEluc3BlY3Rvci4KKyAgICAgICAgLSBSZWZhY3Rv
cmVkIGhvdyBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIEhpZ2hGaWRlbGl0eUxvZyB0byBtYWtlIGl0
CisgICAgICAgICAgZWFzaWVyIHRvIGlubGluZSB3aGVuIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LgorICAgICAgICAtIEltcGxlbWVudGVkIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICBieSBpbmxpbmluZyB0aGUgcHJvY2Vz
cyBvZiB3cml0aW5nIHRvIHRoZSBsb2cgYW5kIGRvaW5nIGEgc21hbGwgYW1vdW50CisgICAgICAg
ICAgb2YgdHlwZSBpbmZlcmVuY2Ugb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2NvcGVEZXBlbmRlbnRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRpb24uaDoKKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uOjpUeXBlTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hG
aWRlbGl0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RnJvbVNj
b3BlV2l0aFByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAg
KEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5v
ZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6Cisg
ICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6UHJl
Zml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0
b3JSdW50aW1lQWdlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
cmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmFibGVkU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXRGcm9tU2NvcGVDb21tb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMTElu
dDo6cHV0VG9TY29wZUNvbW1vbik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93
UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0
R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjppbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKToKKyAgICAg
ICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxp
dHlMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCk6CisgICAgICAgIChKU0M6OkhpZ2hG
aWRlbGl0eUxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdo
RmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAg
KEpTQzo6SGlnaEZpZGVsaXR5TG9nOjpsb2dFbmRQdHIpOgorICAgICAgICAoSlNDOjpIaWdoRmlk
ZWxpdHlMb2c6OmxvZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5TG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
Ojpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRj
aGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6
Y2xvbmVDYXB0dXJlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnByZXBhcmVG
b3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnVuaXF1ZUlERm9yVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dW5pcXVl
SURGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpnbG9iYWxUeXBlU2V0
Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZv
clZhcmlhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChK
U0M6OlN5bWJvbFRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZUxvY2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbik6CisgICAgICAgICogcnVudGltZS9U
eXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1
ZSk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAg
IChKU0M6OlR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcyk6CisgICAgICAgIChKU0M6OlR5
cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9UeXBl
U2V0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6
CisgICAgICAgIChKU0M6OlZNOjpuZXh0VHlwZUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06
OmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZGlz
YWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcEhp
Z2hGaWRlbGl0eVByb2ZpbGluZ1R5cGVzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAg
ICAgIChKU0M6OlZNOjpuZXh0TG9jYXRpb24pOiBEZWxldGVkLgorCiAyMDE0LTA4LTE0ICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGFjdGl2YXRpb25z
IGVhZ2VybHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEw
OSw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3Ro
IiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVu
Z3RoIiA6IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwg
Imxlbmd0aCIgOiA4IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29w
ZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfcHVzaF93aXRoX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wb3Bfc2NvcGUiLCAibGVuZ3RoIiA6IDEgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfbmFtZV9zY29wZSIsICJsZW5ndGgiIDogNCB9
LApAQCAtMTIyLDcgKzEyMCw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxl
X3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9w
cm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAi
bGVuZ3RoIiA6IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZp
c2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25v
cm1hbF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKICAg
ICBjYXNlIG9wX3B1dF9ieV9pZDoKLSAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGU6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKQEAgLTEyMyw3ICsxMjIsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAg
Y2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToK
LSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgogICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkOgpAQCAtMjUxLDcgKzI0OSw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9m
ZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKICAgICBjYXNlIG9wX3B1
c2hfd2l0aF9zY29wZToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKLSAgICBjYXNlIG9wX3B1
dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6CiAgICAgY2Fz
ZSBvcF9lbmQ6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKQEAgLTMyMSw3ICszMTgs
NiBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmFyYXJnczoKLSAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmls
ZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBj
YXNlIG9wX2NhbGxfZXZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMyw3ICsxNTIz
LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICAgICBvcGVy
YW5kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsK
ICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTUzMiw4ICsxNTMxLDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVyZQogICAg
ICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFuZAogICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0
X3RvX3Njb3BlIik7Ci0gICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX3B1dF90b19zY29wZV93
aXRoX3Byb2ZpbGUpCi0gICAgICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsICV1PCVzfCVzPiwgPHN0cnVjdHVyZT4sICVkIiwKICAgICAgICAgICAg
ICAgICByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLAogICAgICAgICAgICAgICAgIG1vZGVB
bmRUeXBlLm9wZXJhbmQoKSwgcmVzb2x2ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1vZGUoKSksIHJl
c29sdmVUeXBlTmFtZShtb2RlQW5kVHlwZS50eXBlKCkpLApAQCAtMTcxNiw2ICsxNzEzLDExIEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBib29sIGRpZENs
b25lU3ltYm9sVGFibGUgPSBmYWxzZTsKICAgICAKICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYg
KG1fdm0tPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGxv
Y2tlcik7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgc3ltYm9sVGFibGUtPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5j
bG9uZUNhcHR1cmVkTmFtZXMoKm1fdm0pKTsKICAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFi
bGUgPSB0cnVlOwpAQCAtMTk0OSwxMyArMTk1MSwxMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICBjYXNlIG9w
X2dldF9mcm9tX3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBjWzBdLnUub3Bj
b2RlID09IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSA/IDIgOiAxKTsKLSAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BMZW5ndGgg
LSBvZmZzZXRdLnUub3BlcmFuZF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAgICAgICAg
ICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAgICAgICAgICAg
IHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBvcExlbmd0aCAtIG9mZnNldF0gPSBwcm9maWxlOworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKIAogICAgICAgICAgICAgLy8gZ2V0X2Zy
b21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBP
cGVyYW5kCiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbM10udS5vcGVyYW5kKTsKQEAgLTE5NjksMTYgKzE5NjksOSBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJl
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9w
Y29kZSA9PSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IGdldF9mcm9tX3Njb3BlX3dp
dGhfcHJvZmlsZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUs
IE9wZXJhbmQsIC4uLiwgVHlwZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3Ry
dWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9j
YXRpb24qIGxvY2F0aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1
Y3Rpb25PZmZzZXQpOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgOF0udS5sb2Nh
dGlvbiA9IGxvY2F0aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGU6CiAgICAg
ICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUg
c2NvcGUsIGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQK
ICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51
Lm9wZXJhbmQpOwpAQCAtMTk5NSwzMCArMTk4OCw1MCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51
LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9
PSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxl
IHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5k
LCBUeXBlTG9jYXRpb24qCi0gICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0
ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gc2NvcGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQp
OwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0
aW9uOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OiB7CisgICAgICAg
ICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3Byb2ZpbGVfdHlw
ZXNfd2l0aF9oaWdoX2ZpZGVsaXR5IHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywg
aWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9u
T2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3Rh
cnQsIGRpdm90RW5kOwogICAgICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJs
ZUlEOwogICAgICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CiAgICAgICAg
ICAgICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0
LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBtX3N5bWJvbFRhYmxlLmdldCgpOwotCisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2Fz
dDxQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKwog
ICAgICAgICAgICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBl
c0J5dGVjb2RlUHV0VG9TY29wZToKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVHZXRGcm9tU2NvcGU6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBSZXNvbHZl
VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1f
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgKGZsYWcgPT0gUHJvZmls
ZVR5cGVzQnl0ZWNvZGVHZXRGcm9tU2NvcGUgPyBHZXQgOiBQdXQpLCB0eXBlKTsKKworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUs
IGFuZCBhbHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRl
dGVybWluZSB0aGUgZ2xvYmFsSUQKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MTg0CisgICAgICAgICAgICAgICAgaWYgKG9wLnR5
cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5h
Y3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5
cGUgPT0gR2xvYmFsVmFyKQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xv
YmFsT2JqZWN0LmdldCgpLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcg
d2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0
LgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvckhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFi
bGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1w
bCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xU
YWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0o
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZh
cmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOworCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5
dGVjb2RlSGFzR2xvYmFsSUQ6IHsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fc3lt
Ym9sVGFibGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJ
RCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwgdmlydHVhbFJlZ2lz
dGVyLm9mZnNldCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5
bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0g
c3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCBwcm9maWxlUmVnaXN0ZXIu
b2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9s
VGFibGUtPmdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihsb2NrZXIsIHByb2ZpbGVSZWdpc3Rlci5v
ZmZzZXQoKSwgKnZtKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQ6
IApAQCAtMjAyNiwxMCArMjAzOSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5
Tm9HbG9iYWxJREV4aXN0czsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3Q6
IHsKLSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5VGhpc1N0
YXRlbWVudDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewog
ICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7
CiAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudDsKQEAgLTIwNDMsNyArMjA1Miw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtKCktPmhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRUeXBlTG9j
YXRpb24oZ2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRp
dm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKKyAgICAgICAgICAgIHN0
ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9u
KGdsb2JhbFZhcmlhYmxlSUQsCisgICAgICAgICAgICAgICAgbV9vd25lckV4ZWN1dGFibGUtPnNv
dXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKICAg
ICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CiAg
ICAgICAgICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwogCkBA
IC0yNTI0LDkgKzI1MzQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbi5jbGVhcigpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZV93aXRoX3Byb2ZpbGU6CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAg
ICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgogICAgICAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5
cGUgbW9kZUFuZFR5cGUgPQogICAgICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUo
Y3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKQEAgLTM5MzUsMzUgKzM5NDMsNCBAQCBERkc6
OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpCiB9CiAjZW5kaWYKIAotVHlwZUxv
Y2F0aW9uKiBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3Agb3AsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQpCi17Ci0gICAg
dW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Ci0gICAgYm9vbCBzaG91bGRBbmFseXplID0g
bV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JC
eXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwot
ICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRDsKLSAgICBSZWZQdHI8VHlwZVNl
dD4gZ2xvYmFsVHlwZVNldDsKLQotICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZv
ciBvcC50eXBlIGhlcmUsIGFuZCBhbHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4n
dCBzdGF0aWNhbGx5IGRldGVybWluZSB0aGUgZ2xvYmFsSUQKLSAgICBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBudWxscHRyOwotICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIpIAotICAg
ICAgICBzeW1ib2xUYWJsZSA9IG9wLmFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCk7Ci0gICAgZWxz
ZSBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIpCi0gICAgICAgIHN5bWJvbFRhYmxlID0gbV9nbG9i
YWxPYmplY3QuZ2V0KCktPnN5bWJvbFRhYmxlKCk7Ci0gICAgCi0gICAgaWYgKHN5bWJvbFRhYmxl
KSB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOwotICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9y
VmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICAgICAgZ2xvYmFsVHlw
ZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVu
dC5pbXBsKCksICp2bSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7Ci0KLSAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0
aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
KCktPnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlE
LCBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGds
b2JhbFR5cGVTZXQsIHZtKCkpOwotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlv
blBhaXIuZmlyc3Q7Ci0gICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29u
ZDsKLQotICAgIGlmIChzaG91bGRBbmFseXplICYgaXNOZXdMb2NhdGlvbikKLSAgICAgICAgdm0o
KS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9u
KTsKLQotICAgIHJldHVybiBsb2NhdGlvbjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
NzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMjAsOCArMTAyMCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAKLSAgICBUeXBlTG9j
YXRpb24qIHNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3AsIGNvbnN0IElkZW50aWZpZXIm
LCBzaXplX3QpOwotICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCByZXNldFN0dWJJbnRl
cm5hbChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKICAgICB2b2lkIHJlc2V0
U3R1YkR1cmluZ0dDSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5o
CShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlw
ZUxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIyICszMywyMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGVudW0gSGlnaEZpZGVsaXR5R2xvYmFsSURGbGFncyB7CiAgICAgSGlnaEZpZGVsaXR5
TmVlZHNVbmlxdWVJREdlbmVyYXRpb24gPSAtMSwKICAgICBIaWdoRmlkZWxpdHlOb0dsb2JhbElE
RXhpc3RzID0gLTIsCi0gICAgSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMsCi0gICAg
SGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCA9IC00CisgICAgSGlnaEZpZGVsaXR5UmV0dXJuU3Rh
dGVtZW50ID0gLTMKIH07CiAKIHR5cGVkZWYgaW50cHRyX3QgR2xvYmFsVmFyaWFibGVJRDsKIAog
Y2xhc3MgVHlwZUxvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBUeXBlTG9jYXRpb24oKSAKLSAgICAg
ICAgOiBtX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudChVSU5UX01BWCkK
KyAgICBUeXBlTG9jYXRpb24oKQorICAgICAgICA6IG1fbGFzdFNlZW5UeXBlKFR5cGVOb3RoaW5n
KQorICAgICAgICAsIG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50KFVJ
TlRfTUFYKQogICAgICAgICAsIG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNyZWF0ZSgp
KQogICAgICAgICAsIG1fZ2xvYmFsVHlwZVNldChudWxscHRyKQogICAgIHsKICAgICB9CiAKICAg
ICBHbG9iYWxWYXJpYWJsZUlEIG1fZ2xvYmFsVmFyaWFibGVJRDsKKyAgICBSdW50aW1lVHlwZSBt
X2xhc3RTZWVuVHlwZTsKICAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOwogICAgIHVuc2lnbmVkIG1f
ZGl2b3RTdGFydDsKICAgICB1bnNpZ25lZCBtX2Rpdm90RW5kOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcg
QEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogCiAgICAgbV9jb2Rl
QmxvY2stPnNocmlua1RvRml0KCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCkpCisgICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpICYmICFtX2NvZGVCbG9jay0+
dm0oKS0+aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKICAgICAgICAgbV9jb2Rl
QmxvY2stPnNldFN5bWJvbFRhYmxlKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jbG9uZUNh
cHR1cmVkTmFtZXMoKm1fY29kZUJsb2NrLT52bSgpKSk7CiAKICAgICBpZiAobV9leHByZXNzaW9u
VG9vRGVlcCkKQEAgLTEwMDcsNyArMTAwNyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TW92ZSgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHdhdGNoYWJsZVZh
cmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogCiAgICAgaWYgKCFkc3QtPmlzVGVtcG9yYXJ5KCkgJiYg
aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1pdFByb2ZpbGVU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElE
KTsKKyAgICAgICAgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZHN0LCBQcm9maWxl
VHlwZXNCeXRlY29kZUhhc0dsb2JhbElELCBudWxscHRyKTsKIAogICAgIHJldHVybiBkc3Q7CiB9
CkBAIC0xMTI2LDEyICsxMTI2LDE4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdo
RmlkZWxpdHkKICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHBy
ZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7CiB9CiAKLXZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVy
SUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNv
ZGVGbGFnIGZsYWcpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnLCBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dGlmaWVyKQogeworICAgIGlmIChmbGFnID09IFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNj
b3BlIHx8IGZsYWcgPT0gUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3BlKQorICAgICAgICBS
RUxFQVNFX0FTU0VSVChpZGVudGlmaWVyKTsKKworICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBp
bnN0cnVjdGlvbiBpczogb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkgcmVnVG9Q
cm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/CiAg
ICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZ2lzdGVyVG9Qcm9maWxlLT5pbmRleCgpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhl
IFR5cGVMb2NhdGlvbiBvYmplY3QgcG9pbnRlci4KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZsYWcpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChpZGVudGlmaWVyID8gYWRkQ29uc3RhbnQoKmlkZW50aWZpZXIpIDogMCk7CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGIpCkBAIC0x
MjczLDIyICsxMjc5LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRG
cgogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
Y29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVzb2x2ZU1vZGUgcmVzb2x2ZU1v
ZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUg
PSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoc2NvcGUtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudChpZGVudGlmaWVyKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2Rl
QW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRpb24gcG9pbnRl
ci4KLSAgICByZXR1cm4gZHN0OwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKICAg
ICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMo
KS5zaXplKCkpOwpAQCAtMTMwNCwyMSArMTI5NCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UHV0VG8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVz
b2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCi17Ci0gICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLQotICAgIGVtaXRPcGNvZGUo
b3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHNjb3BlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQo
aWRlbnRpZmllcikpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVNb2RlQW5kVHlwZShyZXNvbHZlTW9k
ZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2NhdGlvbiBwb2lu
dGVyLgotICAgIHJldHVybiB2YWx1ZTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRJbnN0YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJl
Z2lzdGVySUQqIGJhc2VQcm90b3R5cGUpCiB7IAogICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2Vv
Zik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMywxMiArMjIzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUcnlEYXRhKiB0
cnlEYXRhOwogICAgIH07CiAKLSAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcgeyAKKyAgICBlbnVtIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRl
Y29kZUZsYWcgeworICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZVB1dFRvU2NvcGUsCisgICAg
ICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlR2V0RnJvbVNjb3BlLAogICAgICAgICBQcm9maWxlVHlw
ZXNCeXRlY29kZUhhc0dsb2JhbElELAogICAgICAgICBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNO
b3RIYXZlR2xvYmFsSUQsCiAgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1
bWVudCwKLSAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3QsCi0g
ICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQgIAorICAg
ICAgICBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50CiAgICAgfTsK
IAogICAgIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTQxMCw3ICs0MTEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZERpdm90KTsKLSAgICAgICAgdm9pZCBlbWl0UHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dp
dGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcpOworICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFnLCBjb25zdCBJZGVudGlmaWVyKik7CiAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAt
NDc3LDkgKzQ3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSgpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVNjb3BlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0
RnJvbVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50
aWZpZXImLCBSZXNvbHZlTW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRGcm9tU2Nv
cGVXaXRoUHJvZmlsZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9T
Y29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqIHZh
bHVlLCBSZXNvbHZlTW9kZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRUb1Njb3BlV2l0
aFByb2ZpbGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklE
KiB2YWx1ZSwgUmVzb2x2ZU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRM
YWJlbChMYWJlbCopOwogICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAko
cmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDE0IEBAIFJlZ2lz
dGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIHsKICAgICBpZiAoZHN0ID09IGdl
bmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBn
ZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRvci50aGlzUmVn
aXN0ZXIoKSk7CisKKyAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShnZW5lcmF0b3IudGhp
c1JlZ2lzdGVyKCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVs
bHB0cik7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gNDsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8ocG9zaXRpb24oKSwgSlNUZXh0UG9zaXRpb24oLTEsIHBvc2l0aW9uKCkub2Zmc2V0ICsgdGhp
c0xlbmd0aCwgLTEpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNjAsNyBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRS
ZXN1bHQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoZ2VuZXJhdG9yLmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShsb2NhbC5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVIYXNHbG9iYWxJRCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
SGFzR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRp
b24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQo
ZHN0LCBsb2NhbC5nZXQoKSk7CkBAIC0xNjIsMTMgKzE2OSwxMyBAQCBSZWdpc3RlcklEKiBSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QgPSBtX3N0
YXJ0ICsgbV9pZGVudC5sZW5ndGgoKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90LCBtX3N0YXJ0LCBkaXZvdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBtX2lkZW50KTsKLSAgICBSZWdpc3RlcklEKiByZXQ7CisgICAgUmVnaXN0ZXJJRCogZmluYWxE
ZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiBy
ZXN1bHQgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShmaW5hbERlc3QsIHNjb3BlLmdldCgp
LCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZVdpdGhQcm9maWxlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9maWxlVHlw
ZXNCeXRlY29kZUdldEZyb21TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhtX3Bvc2l0aW9uLCBKU1Rl
eHRQb3NpdGlvbigtMSwgbV9wb3NpdGlvbi5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkp
OwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzY29wZS5nZXQoKSwgbV9pZGVudCwgVGhy
b3dJZk5vdEZvdW5kKTsKLSAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXlOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzg3LDcgKzM5NCw3IEBAIFJlZ2lz
dGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXQKICAgICBSZWdpc3RlcklEKiBmaW5h
bERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBwcm9w
ZXJ0eSk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0
eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eShmaW5hbERlc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERl
c3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CkBA
IC00MTMsNyArNDIwLDcgQEAgbm9uQXJndW1lbnRzUGF0aDoKICAgICBSZWdpc3RlcklEKiBmaW5h
bERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UsIG1faWRlbnQpOwog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewot
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxE
ZXN0LCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZmluYWxEZXN0LCBQcm9m
aWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNDk3LDcg
KzUwNCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBn
ZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmlu
ZWQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZh
bHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmls
ZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNTE4LDcgKzUy
NSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICAgICAg
Ly8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBjb25z
dHJ1Y3RvcnMuCiAgICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChy
ZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICBpZiAo
Z2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5W
YWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxs
cHRyKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHJldDsKQEAgLTUzNCw3ICs1NDEsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVu
Yy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCwgVGhyb3dJZk5v
dEZvdW5kKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJu
VmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci5p
c1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmls
ZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtNTUzLDcgKzU2
MCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBnZW5l
cmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQ
cm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVU
eXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTU3MSw3ICs1Nzgs
NyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0CiAgICAgZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBtX2lkZW50KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwo
cmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXR1cm5WYWx1ZS5n
ZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdl
dCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpA
QCAtNjQ1LDcgKzY1Miw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIH0KICAgICBp
ZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVl
LmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXR1
cm5WYWx1ZS5nZXQoKTsKQEAgLTc1OSw3ICs3NjYsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgp
KTsKICAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eShyZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xv
YmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0K
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CkBAIC04MTQsMTEgKzgyMSwxMSBAQCBSZWdp
c3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBpZGVudCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwg
aWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG9sZFZhbHVl
ID0gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsK
ICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUoc2NvcGUuZ2V0KCks
IGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLmdldCgpLCBQcm9maWxlVHlw
ZXNCeXRlY29kZVB1dFRvU2NvcGUsICZpZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29w
ZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgIH0KIAog
ICAgIHJldHVybiBvbGRWYWx1ZS5nZXQoKTsKIH0KQEAgLTg0Miw3ICs4NDksNyBAQCBSZWdpc3Rl
cklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJyYWNrZXQoQnl0CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVy
YXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHZhbHVlLmdldCgp
KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUuZ2V0
KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsKQEAgLTg2Niw3ICs4
NzMsNyBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29kCiAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUu
Z2V0KCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRy
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVz
c2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgb2xkVmFsdWUpOwpAQCAtMTAw
MiwxMSArMTAwOSwxMSBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXRl
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBpZGVudCk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgaWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAg
ZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG1fb3BlcmF0b3IpOworICAgIGdl
bmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBU
aHJvd0lmTm90Rm91bmQpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJv
ZmlsZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUu
Z2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlUHV0VG9TY29wZSwgJmlkZW50KTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90
Rm91bmQpOworICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZO
ZWVkZWQoZHN0LCB2YWx1ZS5nZXQoKSk7CiB9CiAKQEAgLTEwMjcsNyArMTAzNCw3IEBAIFJlZ2lz
dGVySUQqIFByZWZpeE5vZGU6OmVtaXRCcmFja2V0KEJ5dGUKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwog
ICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewot
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUs
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVz
Qnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CkBAIC0xMDQ5LDcgKzEwNTYsNyBAQCBS
ZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0RG90KEJ5dGVjb2RlCiAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAg
IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVudCwgdmFsdWUpOwogICAgIGlm
IChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodmFsdWUsIFByb2Zp
bGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CkBAIC0xNTIwLDEzICsxNTI3LDEyIEBAIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIG1faWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCks
IG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3Vs
dCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgbV9yaWdodCwgbV9vcGVy
YXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJl
c3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwotICAgIFJlZ2lzdGVySUQqIHJldDsgCisgICAgUmVn
aXN0ZXJJRCogcmV0dXJuUmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdl
dCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdl
bmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJl
dCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lk
ZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyZXN1bHQuZ2V0KCksIFByb2ZpbGVUeXBl
c0J5dGVjb2RlUHV0VG9TY29wZSwgJm1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwotICAgIH0gZWxzZQotICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2Nv
cGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsK
LSAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gcmV0dXJuUmVzdWx0OwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1NTksMTMgKzE1NjUsMTIgQEAgUmVn
aXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICBkc3QgPSAwOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3JpZ2h0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogcmV0OworICAgIFJlZ2lzdGVy
SUQqIHJldHVyblJlc3VsdCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwg
bV9pZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lm
Tm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7CiAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Ci0gICAgICAgIHJldCA9IGdlbmVyYXRv
ci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQu
Z2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90
VGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHJlc3VsdC5nZXQoKSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVQdXRUb1Njb3Bl
LCAmbV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgbV9p
ZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90
Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICB9IAor
ICAgIHJldHVybiByZXR1cm5SZXN1bHQ7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBBc3NpZ25Eb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xNTc5LDcgKzE1ODQsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0
ZWNvZGUoCiAgICAgUmVnaXN0ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSkgPyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25J
Zk5lZWRlZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQp
OwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
ewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9y
d2FyZFJlc3VsdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRS
ZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgfQogICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZvcndhcmRSZXN1bHQpOwpAQCAt
MTU5OCw3ICsxNjAzLDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRCeXRl
YwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dEJ5
SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdXBkYXRlZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5
cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTE2MjQsNyArMTYyOSw3IEBA
IFJlZ2lzdGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWdpc3RlcklE
KiBmb3J3YXJkUmVzdWx0ID0gKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJl
c3VsdCA6IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24ocmVzdWx0KSwgcmVzdWx0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFs
KGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmb3J3YXJkUmVzdWx0LCBQcm9maWxl
VHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0KTsKQEAgLTE2NDQsNyArMTY0OSw3
IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEIKICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
dXBkYXRlZFZhbHVlKTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGln
aEZpZGVsaXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KHVwZGF0ZWRWYWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
LCBudWxscHRyKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICB9CiAKQEAg
LTIyNTEsNyArMjI1Niw3IEBAIHZvaWQgUmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2UKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5SZWdpc3RlciA9IG1fdmFsdWUgPyBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3ZhbHVlKSA6IGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25SZXR1cm5TdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuUmVnaXN0ZXIuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVj
b2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQsIG51bGxwdHIpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIH0KICAgICBpZiAoZ2VuZXJhdG9yLnNjb3BlRGVwdGgoKSkgewpA
QCAtMjU4MiwxNyArMjU4NywxMyBAQCB2b2lkIEV2YWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lCiB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgSlNUZXh0UG9zaXRpb24g
c3RhcnQoLTEsIG1fc3RhcnRTdGFydE9mZnNldCwgLTEpOyAvLyBUaGlzIGRpdm90IGlzIGF0IHRo
ZSBvcGVuIGJyYWNlIG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5k
KC0xLCBtX3N0YXJ0U3RhcnRPZmZzZXQgKyAxLCAtMSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksIFBy
b2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25UaGlzT2JqZWN0KTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oc3RhcnQsIGVuZCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXJhbWV0ZXJzLT5zaXplKCk7IGkr
KykgewogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBEZXN0cnVjdHVyaW5nIGFzc2lnbm1l
bnRzIGludG8gYXJndW1lbnRzLgogICAgICAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMtPmF0KGkp
LT5pc0JpbmRpbmdOb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBCaW5kaW5nTm9kZSogcGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihtX3Bh
cmFtZXRlcnMtPmF0KGkpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQgcmVnKENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoaSkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCZyZWcsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1
bWVudCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkoJnJlZywgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50LCBudWxscHRy
KTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKHBhcmFtZXRlci0+ZGl2b3RTdGFydCgpLCBwYXJhbWV0ZXItPmRpdm90RW5k
KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjYxNCw3ICsyNjE1LDcgQEAgdm9pZCBGdW5jdGlv
bkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogICAgIGlmICghcmV0dXJuTm9kZSkgewogICAg
ICAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5pc0NvbnN0cnVjdG9yKCkgPyBnZW5lcmF0
b3IudGhpc1JlZ2lzdGVyKCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7
CiAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0
eShyMCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCk7IC8vIERv
IG5vdCBlbWl0IGV4cHJlc3Npb24gaW5mbyBmb3IgdGhpcyBwcm9maWxlIGJlY2F1c2UgaXQncyBu
b3QgaW4gdGhlIHVzZXIncyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyMCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5j
dGlvblJldHVyblN0YXRlbWVudCwgbnVsbHB0cik7IC8vIERvIG5vdCBlbWl0IGV4cHJlc3Npb24g
aW5mbyBmb3IgdGhpcyBwcm9maWxlIGJlY2F1c2UgaXQncyBub3QgaW4gdGhlIHVzZXIncyBzb3Vy
Y2UgY29kZS4KICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0KCkgPj0gbGluZVN0YXJ0T2Zmc2V0
KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUs
IGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRSZXR1cm4ocjApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwCShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbXBsZXRp
b24uaCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJIaWdoRmlk
ZWxpdHlMb2cuaCIKICNpbmNsdWRlICJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaCIKICNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdC5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIlBhcnNl
ckVycm9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJTb3Vy
Y2VDb2RlLmgiCisjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNjEsNiArNjMsNyBA
QCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBCiAgICAgLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3NjcmlwdERl
YnVnU2VydmVyKG51bGxwdHIpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2lzVHlw
ZVByb2ZpbGluZ0VuYWJsZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTE5OSw4ICsyMDIsMTAgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeQogICAgIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwogICAgIHR5cGVE
ZXNjcmlwdGlvbnMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAo
IXZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgaWYgKCF2bS5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiVGhlIFZNIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIFR5cGUgSW5mb3Jt
YXRpb24uIik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBkb3VibGUgc3RhcnQgPSBj
dXJyZW50VGltZU1TKCk7CiAgICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlk
ZWxpdHlMb2coIlVzZXIgUXVlcnkiKTsKQEAgLTIzMSw2ICsyMzYsNjggQEAgdm9pZCBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeQogICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9y
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZtc1xuIiwgZW5k
IC0gc3RhcnQpOwogfQogCitjbGFzcyBUeXBlUmVjb21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9j
azo6Vm9pZEZ1bmN0b3IgeworcHVibGljOgorICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoSlND
ZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhGdW5jdGlvbkV4
ZWN1dGFibGU6OmluZm8oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNl
bGwpOworICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOworICAg
ICAgICBleGVjdXRhYmxlLT5jbGVhclVubGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENv
bXBpbGluZygpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zRm9yVHlwZVByb2ZpbGluZyhWTSYgdm0sIGJvb2wgc2hvdWxkRW5hYmxlVHlwZVByb2ZpbGlu
ZykKK3sKKyAgICB2bS53YWl0Rm9yQ29tcGlsYXRpb25zVG9Db21wbGV0ZSgpOworCisgICAgYm9v
bCBuZWVkc1RvUmVjb21waWxlID0gKHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcgPyB2bS5lbmFi
bGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCkgOiB2bS5kaXNhYmxlSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZygpKTsKKyAgICBpZiAobmVlZHNUb1JlY29tcGlsZSkgeworICAgICAgICBUeXBl
UmVjb21waWxlciByZWNvbXBpbGVyOworICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0
aW9uU2NvcGUodm0uaGVhcCk7CisgICAgICAgIHZtLmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNo
TGl2ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIHJlY29tcGlsZXIpOworICAgIH0KK30KKwordm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3RvckRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQoreworICAgIGlmIChyZWFzb24gIT0gSW5zcGVj
dG9yRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkICYmIG1faXNUeXBl
UHJvZmlsaW5nRW5hYmxlZCkKKyAgICAgICAgc2V0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0Vu
YWJsZWRTdGF0ZShmYWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFi
bGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKEVycm9yU3RyaW5nKikKK3sKKyAgICBzZXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRlKHRydWUpOworfQorCit2b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoRXJyb3JT
dHJpbmcqKQoreworICAgIHNldEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkU3RhdGUo
ZmFsc2UpOworfQorCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0VuYWJsZWRTdGF0ZShib29sIHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcp
Cit7CisgICAgaWYgKG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCA9PSBzaG91bGRFbmFibGVUeXBl
UHJvZmlsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzVHlwZVByb2ZpbGluZ0VuYWJs
ZWQgPSBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nOworCisgICAgVk0mIHZtID0gZ2xvYmFsVk0o
KTsKKworICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2FmZSB0byBy
ZWNvbXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAorICAgIC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0
aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgorICAgIGlmICh2bS5lbnRyeVNjb3BlKSB7CisgICAg
ICAgIHZtLmVudHJ5U2NvcGUtPnNldEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lcih0aGlzLAorICAg
ICAgICAgICAgWz1dIChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikgeworICAgICAgICAgICAgICAg
IHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zRm9yVHlwZVByb2ZpbGluZyh2bSwgc2hvdWxkRW5hYmxl
VHlwZVByb2ZpbGluZyk7IAorICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0gZWxzZQor
ICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHNob3Vs
ZEVuYWJsZVR5cGVQcm9maWxpbmcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuaAkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDggQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZQogcHVibGlj
OgogICAgIHZpcnR1YWwgfkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpOwogCisgICAgdmlydHVhbCB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFz
b24pIG92ZXJyaWRlOworCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92
ZXJyaWRlIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVy
cm9yU3RyaW5nKikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQs
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlk
ZSBmaW5hbDsKQEAgLTY3LDYgKzY5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuKEVycm9yU3RyaW5nKikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0
cyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYg
bG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4mKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZyhFcnJvclN0cmlu
ZyopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZyhFcnJvclN0cmluZyopIG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgc2V0U2NyaXB0
RGVidWdTZXJ2ZXIoU2NyaXB0RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2Ny
aXB0RGVidWdTZXJ2ZXIgPSBzY3JpcHREZWJ1Z1NlcnZlcjsgfQogCkBAIC04NCw5ICs4OCwxMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CiAKIHBy
aXZhdGU6CisgICAgdm9pZCBzZXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZFN0YXRl
KGJvb2wpOworCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcjsKICAgICBTY3JpcHREZWJ1Z1NlcnZlciogbV9zY3JpcHREZWJ1Z1NlcnZlcjsKICAgICBi
b29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0
UnVudGltZUFnZW50LmNwcAkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVB
Z2VudDo6ZGlkQ3JlYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JSdW50aW1l
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAK
LXZvaWQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIEpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25u
ZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7
CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOworCisgICAgSW5zcGVjdG9yUnVudGlt
ZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChyZWFzb24pOwogfQogCiBWTSYg
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6Omdsb2JhbFZNKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCShy
ZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1J1bnRpbWUuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSwxNCBAQAogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgIiRyZWYiOiAiVHlwZURlc2NyaXB0aW9uIiwgImRlc2NyaXB0aW9uIjogIlR5cGVzIGZvciBy
ZXF1ZXN0ZWQgdmFyaWFibGUuIiB9IH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiUmV0dXJucyBkZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rp
b24uIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGVI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJF
bmFibGVzIGhpZ2ggZmlkZWxpdHkgdHlwZSBwcm9maWxpbmcgb24gdGhlIFZNLiIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlzYWJsZUhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRpc2FibGVzIGhpZ2gg
ZmlkZWxpdHkgdHlwZSBwcm9maWxpbmcgb24gdGhlIFZNLiIKICAgICAgICAgfQogICAgIF0sCiAg
ICAgImV2ZW50cyI6IFsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpTU0Uy
Q2hlY2tTCiAjaW5jbHVkZSAiQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJI
aWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJ
VElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCkBAIC0yNjcsNiArMjY4LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfaW5jKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJvZmlsZV9kaWRfY2FsbCkKICAgICAgICAg
REVGSU5FX09QKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKQorICAgICAgICBERUZJTkVfT1Aob3BfcHJv
ZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNo
X25hbWVfc2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXNoX3dpdGhfc2NvcGUpCiAgICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5lOgpAQCAtNDk4LDYgKzUwMCwxMCBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY29kZUJs
b2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6
bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgdGhlIG1vc3QgdXAgdG8gZGF0ZSB0
eXBlIGluZm9ybWF0aW9uIHdoZW4gcGVyZm9ybWluZyB0eXBlY2hlY2sgb3B0aW1pemF0aW9ucyBm
b3Igb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkuCisgICAgaWYgKG1fdm0tPmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIG1fdm0tPmhpZ2hGaWRl
bGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5n
IGZvciBKSVQgY29tcGlsYXRpb24uIikpOwogICAgIAogICAgIGlmIChPcHRpb25zOjpzaG93RGlz
YXNzZW1ibHkoKSB8fCBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fZGlz
YXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IEpJVERpc2Fzc2VtYmxlcihtX2NvZGVCbG9jaykpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHVzaF9uYW1lX3Njb3BlKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMTcyNTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA2LDYgKzEzMDYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9faW5kZXhfc3RyaW5nKEluc3RydQogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAK
K3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9wcm9maWxlX3R5cGVz
X3dpdGhfaGlnaF9maWRlbGl0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzI1OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVs
aXR5TG9nLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
ICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJNYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNp
bmNsdWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMzM2LDYgKzEz
MzgsNjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydQogICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlw
ZUxvY2F0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRpb247CisgICAgaW50IHZh
bHVlVG9Qcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKworICAgIEp1bXBM
aXN0IGp1bXBUb0VuZDsKKworICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hl
Y2ssIGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9n
LgorICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2Yg
dGhlIDY0LWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgorICAgIGlmIChjYWNoZWRUeXBlTG9jYXRp
b24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCisgICAgICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSkpOworICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZU51bGwpCisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
KTsKKyAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5
cGVCb29sZWFuKSB7CisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH4xKSwgcmVnVDEpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aDY0KEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTY0KFZhbHVlRmFsc2UpKSk7CisgICAgfSBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVNYWNoaW5lSW50
KQorICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJl
Z1QwKSk7CisgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlTnVtYmVyKQorICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGVtaXRKdW1wSWZJbW1lZGlh
dGVOdW1iZXIocmVnVDApKTsKKyAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0
SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgIH0KKworICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgorICAg
IEhpZ2hGaWRlbGl0eUxvZyogY2FjaGVkSGlnaEZpZGVsaXR5TG9nID0gbV92bS0+aGlnaEZpZGVs
aXR5TG9nKCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZEhpZ2hGaWRlbGl0eUxvZyks
IHJlZ1QyKTsKKyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgorICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgSGlnaEZpZGVsaXR5TG9nOjpjdXJyZW50TG9nRW50cnlPZmZz
ZXQoKSksIHJlZ1QxKTsKKworICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBl
bnRyeS4KKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlMb2c6
OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisKKyAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJl
SUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhl
IGxvZyBlbnRyeS4KKyAgICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1Qw
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIEhpZ2hGaWRlbGl0
eUxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBKdW1wIHNraXBJc0Nl
bGwgPSBqdW1wKCk7CisgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5OjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgc2tpcElzQ2VsbC5saW5rKHRoaXMpOworCisgICAgLy8g
U3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7CisgICAgc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhyZWdUMSwgSGlnaEZpZGVsaXR5TG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQo
KSkpOworCisgICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHNpemVvZihIaWdoRmlkZWxpdHlMb2c6OkxvZ0VudHJ5KSksIHJlZ1Qx
KTsKKyAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBIaWdoRmlkZWxpdHlMb2c6OmN1
cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZEhpZ2hGaWRlbGl0eUxvZy0+
bG9nRW5kUHRyKCkpKTsKKyAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQg
b2YgdGhlIGxvZy4KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmls
ZXJMb2cpOworICAgIHNraXBDbGVhckxvZy5saW5rKHRoaXMpOworCisgICAganVtcFRvRW5kLmxp
bmsodGhpcyk7Cit9CisKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkVy
cm9ySGFuZGxpbmdTY29wZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKICNpbmNsdWRl
ICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKQEAgLTE5MjEsNiArMTkyMiwxMSBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0CiAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLnN0cmluZygpKTsKIH0K
IAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2coRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nl
c3NIaWdoRmlkZWxpdHlMb2coQVNDSUlMaXRlcmFsKCJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5z
aWRlIGJhc2VsaW5lIEpJVCIpKTsKK30KKwogfSAvLyBleHRlcm4gIkMiCiAKIC8vIE5vdGU6IGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxhY2VkIGJl
Zm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCw4IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmkKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90
KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0
ZSosIGludDMyX3QpOwogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQ
cm9maWxlckxvZyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgog
CiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsMTUgKzU0MCw2IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgKICAgICBMTElOVF9SRVRVUk4oUmVnRXhwT2JqZWN0Ojpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCkpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV90
eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gcGNbMl0udS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVlIHZhbCA9
IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwotICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNv
cmRUeXBlSW5mb3JtYXRpb25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9uKTsKLSAgICBMTElOVF9F
TkRfSU1QTCgpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2hlY2tfaGFz
X2luc3RhbmNlKQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xMzc1LDggKzEzNjYsMTAgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfcwogICAgIExMSU5UX1JFVFVS
TihKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIGV4ZWMtPnNjb3BlKCksIGlkZW50KSk7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0
aW9uKiBwYywgVk0mIHZtKQorTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9t
X3Njb3BlKQogeworICAgIExMSU5UX0JFR0lOKCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CiAg
ICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoMikuanNWYWx1
ZSgpKTsKICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5k
KTsKQEAgLTEzODQsOCArMTM3Nyw4IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1v
bihFeGVjU3QKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSk7CiAgICAgaWYgKCFzY29wZS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewogICAgICAgICBpZiAobW9kZUFu
ZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
ZXhlYywgaWRlbnQpKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICBMTElOVF9SRVRVUk4oZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVVbmRl
ZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSkpOworICAgICAgICBMTElOVF9SRVRVUk4o
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMu
IFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRu
J3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCkBAIC0xNDAyLDI3ICsx
Mzk1LDEzIEBAIHN0YXRpYyBKU1ZhbHVlIGdldEZyb21TY29wZUNvbW1vbihFeGVjU3QKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKLX0K
LQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQotewotICAg
IExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGdldEZyb21TY29wZUNvbW1vbihl
eGVjLCBwYywgdm0pOwotICAgIExMSU5UX1JFVFVSTih2YWx1ZSk7CisgICAgTExJTlRfUkVUVVJO
KHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpKTsKIH0KIAotTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkKK0xMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4ZWMsIHBjLCB2bSk7Ci0gICAgVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzhdLnUubG9jYXRpb247Ci0gICAgdm0uaGlnaEZpZGVs
aXR5TG9nKCktPnJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbHVlLCBsb2NhdGlv
bik7Ci0gICAgTExJTlRfUkVUVVJOKHZhbHVlKTsKLX0KIAotc3RhdGljIEpTT2JqZWN0KiBwdXRU
b1Njb3BlQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjKQotewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKICAg
ICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUCgxKS5qc1ZhbHVl
KCkpOwpAQCAtMTQzMCwzNSArMTQwOSwxMyBAQCBzdGF0aWMgSlNPYmplY3QqIHB1dFRvU2NvcGVD
b21tb24oRXhlY1N0CiAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2
ZU1vZGVBbmRUeXBlKHBjWzRdLnUub3BlcmFuZCk7CiAKICAgICBpZiAobW9kZUFuZFR5cGUubW9k
ZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50
KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRl
bnQpOworICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4
ZWMsIGlkZW50KSk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKSk7CiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwg
ZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBDb21tb25TbG93UGF0aHM6OnRy
eUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgbW9kZUFu
ZFR5cGUsIHNsb3QpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAg
ICBKU09iamVjdCogZXJyb3IgPSBwdXRUb1Njb3BlQ29tbW9uKGV4ZWMsIHBjKTsKLSAgICBpZiAo
ZXJyb3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVycm9yKTsKLSAgICBMTElOVF9FTkQoKTsKLX0K
LQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2Zp
bGUpCi17Ci0gICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzIHRoZSBzYW1l
IGFzIHB1dF90b19zY29wZSB3aXRoIGEgVHlwZUxvY2F0aW9uIGFwcGVuZGVkOiBwdXRfdG9fc2Nv
cGVfd2l0aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3Ry
dWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCi0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBK
U09iamVjdCogZXJyb3IgPSBwdXRUb1Njb3BlQ29tbW9uKGV4ZWMsIHBjKTsKLSAgICBpZiAoZXJy
b3IpCi0gICAgICAgIExMSU5UX1RIUk9XKGVycm9yKTsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gcGNbN10udS5sb2NhdGlvbjsKLSAgICBKU1ZhbHVlIHZhbCA9IExMSU5UX09QX0MoMyku
anNWYWx1ZSgpOwotICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5yZWNvcmRUeXBlSW5mb3JtYXRp
b25Gb3JMb2NhdGlvbih2YWwsIGxvY2F0aW9uKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlz
aW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTAgKzExOCw3IEBAIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfcHIKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9nZXRfZnJvbV9zY29wZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpOwotTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSk7
CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxv
d19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwogI2lmICFFTkFCTEUo
SklUKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRf
dm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTM4MSwxNSArMTM4MSw1IEBAIF9sbGludF9v
cF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgZGlzcGF0Y2goNSkKIAogX2xsaW50X29wX3By
b2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQotICAgIGRpc3BhdGNo
KDQpCi0KLV9sbGludF9vcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlOgotICAgIHRyYWNlRXhl
Y3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfdG9fc2NvcGVf
d2l0aF9wcm9maWxlKQotICAgIGRpc3BhdGNoKDgpCi0KLV9sbGludF9vcF9nZXRfZnJvbV9zY29w
ZV93aXRoX3Byb2ZpbGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkKLSAgICBkaXNwYXRj
aCg5KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdo
X2ZpZGVsaXR5KQorICAgIGRpc3BhdGNoKDYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDcgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBDb2RlQ2FjaGU6OmdldEdsbwogewogICAg
IFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNlQ29kZUtleShzb3VyY2UsIFN0cmluZygpLCBDYWNo
ZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVUeXBlLCBzdHJpY3RuZXNzKTsKICAg
ICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3NvdXJjZUNvZGUuYWRkKGtl
eSwgU291cmNlQ29kZVZhbHVlKCkpOwotICAgIGJvb2wgY2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUg
PT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT2ZmOworICAgIGJvb2wg
Y2FuQ2FjaGUgPSBkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09
IFByb2ZpbGVyT2ZmICYmICF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpOwog
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgY2FuQ2FjaGUpIHsKICAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGpzQ2FzdDxVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqPihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAg
ICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENv
ZGVCbG9jay0+Zmlyc3RMaW5lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25GdXp6LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5j
bHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC02MzYsNCAr
NjM3LDEzIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcKICAgICBS
RVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBPUCgyKS5qc1ZhbHVl
KCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVsaXR5KQoreworICAgIEJFR0lOKCk7CisgICAg
VHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHBjWzJdLnUubG9jYXRpb247CisgICAgSlNWYWx1ZSB2
YWwgPSBPUF9DKDEpLmpzVmFsdWUoKTsKKyAgICB2bS5oaWdoRmlkZWxpdHlMb2coKS0+cmVjb3Jk
VHlwZUluZm9ybWF0aW9uRm9yTG9jYXRpb24odmFsLCBsb2NhdGlvbik7CisgICAgRU5EKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzMsNiArMjMzLDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfc3Ry
dQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3Ry
aW5nKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRo
X2hpZ2hfZmlkZWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShyZXZpc2lv
biAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw0OSArNDMsNDcgQEAgdm9pZCBIaWdoRmlkZWxp
dHlMb2c6OmluaXRpYWxpemVIaWdoRmlkZQogICAgIEFTU0VSVCghbV9sb2dTdGFydFB0cik7CiAg
ICAgbV9oaWdoRmlkZWxpdHlMb2dTaXplID0gNTAwMDA7CiAgICAgbV9sb2dTdGFydFB0ciA9IG5l
dyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwotICAgIG1fbmV4dEJ1ZmZlciA9IG5l
dyBMb2dFbnRyeVttX2hpZ2hGaWRlbGl0eUxvZ1NpemVdOwotICAgIG1fY3VycmVudE9mZnNldCA9
IDA7CisgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgPSBtX2xvZ1N0YXJ0UHRyOworICAgIG1fbG9n
RW5kUHRyID0gbV9sb2dTdGFydFB0ciArIG1faGlnaEZpZGVsaXR5TG9nU2l6ZTsKIH0KIAogSGln
aEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKIHsKICAgICBkZWxldGVbXSBtX2xvZ1N0
YXJ0UHRyOwotICAgIGRlbGV0ZVtdIG1fbmV4dEJ1ZmZlcjsKIH0KIAogdm9pZCBIaWdoRmlkZWxp
dHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3RyaW5nIHJlYXNvbikKIHsKLSAgICBpZiAo
IW1fY3VycmVudE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAogICAgIGRv
dWJsZSBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgTG9nRW50cnkqIGVudHJ5ID0gbV9s
b2dTdGFydFB0cjsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+PiBzZWVuU2hhcGVzOwotICAgIHNpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG1fY3Vy
cmVudE9mZnNldCkgeworICAgIHdoaWxlIChlbnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cikg
ewogICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9IGVudHJ5LT5zdHJ1Y3R1cmVJRDsKICAgICAgICAg
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZTsgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBl
bnRyeS0+dmFsdWU7CiAgICAgICAgIGlmIChpZCkgewogICAgICAgICAgICAgYXV0byBpdGVyID0g
c2VlblNoYXBlcy5maW5kKGlkKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHNlZW5TaGFwZXMu
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBzaGFwZSA9IEhlYXA6OmhlYXAoZW50cnktPnZhbHVl
LmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+c3RydWN0dXJlSUQpLT50
b1N0cnVjdHVyZVNoYXBlKGVudHJ5LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBI
ZWFwOjpoZWFwKHZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChlbnRyeS0+
c3RydWN0dXJlSUQpLT50b1N0cnVjdHVyZVNoYXBlKHZhbHVlKTsKICAgICAgICAgICAgICAgICBz
ZWVuU2hhcGVzLnNldChpZCwgc2hhcGUpOwotICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgc2hhcGUgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChlbnRyeS0+bG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKLSAgICAg
ICAgICAgIGVudHJ5LT5sb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUo
ZW50cnktPnZhbHVlLCBzaGFwZSwgaWQpOwotICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1faW5z
dHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUoZW50cnktPnZhbHVlLCBzaGFwZSwgaWQp
OworICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBlbnRyeS0+bG9j
YXRpb247CisgICAgICAgIGxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9IHR5cGU7CisgICAgICAg
IGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQorICAgICAgICAgICAgbG9jYXRpb24tPm1f
Z2xvYmFsVHlwZVNldC0+YWRkVHlwZUluZm9ybWF0aW9uKHR5cGUsIHNoYXBlLCBpZCk7CisgICAg
ICAgIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWRkVHlwZUluZm9ybWF0aW9uKHR5
cGUsIHNoYXBlLCBpZCk7CiAKICAgICAgICAgZW50cnkrKzsKLSAgICAgICAgaSsrOwogICAgIH0K
IAotICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisgICAgbV9jdXJyZW50TG9nRW50cnlQdHIgPSBt
X2xvZ1N0YXJ0UHRyOwogCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZG91YmxlIGFmdGVy
ID0gY3VycmVudFRpbWVNUygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw4ICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIFR5
cGVMb2NhdGlvbiogbG9jYXRpb247IAogICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsK
KworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKExvZ0VudHJ5LCBzdHJ1Y3R1cmVJRCk7IH0KKyAgICAgICAgc3RhdGlj
IHB0cmRpZmZfdCB2YWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2dFbnRy
eSwgdmFsdWUpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9jYXRpb25PZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9nRW50cnksIGxvY2F0aW9uKTsgfQogICAgIH07CiAK
KwogICAgIEhpZ2hGaWRlbGl0eUxvZygpCiAgICAgICAgIDogbV9sb2dTdGFydFB0cigwKQogICAg
IHsKQEAgLTU5LDM3ICs2NCwyOSBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJl
Y29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKEpTVmFsdWUgdmFsdWUsIFR5cGVMb2NhdGlv
biogbG9jYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9sb2dTdGFydFB0cik7Ci0gICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQgPCBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpOwotICAg
IAotICAgICAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyICsgbV9jdXJyZW50T2Zm
c2V0OwotICAgIAotICAgICAgICBlbnRyeS0+bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAgICAg
ZW50cnktPnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGVudHJ5LT5zdHJ1Y3R1cmVJRCA9ICh2YWx1
ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpIDogMCk7CisKKyAgICAg
ICAgbV9jdXJyZW50TG9nRW50cnlQdHItPmxvY2F0aW9uID0gbG9jYXRpb247CisgICAgICAgIG1f
Y3VycmVudExvZ0VudHJ5UHRyLT52YWx1ZSA9IHZhbHVlOworICAgICAgICBtX2N1cnJlbnRMb2dF
bnRyeVB0ci0+c3RydWN0dXJlSUQgPSAodmFsdWUuaXNDZWxsKCkgPyB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlSUQoKSA6IDApOwogICAgIAotICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsK
LSAgICAgICAgaWYgKG1fY3VycmVudE9mZnNldCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCisg
ICAgICAgIG1fY3VycmVudExvZ0VudHJ5UHRyICs9IDE7CisgICAgICAgIGlmIChVTkxJS0VMWSht
X2N1cnJlbnRMb2dFbnRyeVB0ciA9PSBtX2xvZ0VuZFB0cikpCiAgICAgICAgICAgICBwcm9jZXNz
SGlnaEZpZGVsaXR5TG9nKCJMb2cgRnVsbCIpOwogICAgIH0KIAogICAgIHZvaWQgcHJvY2Vzc0hp
Z2hGaWRlbGl0eUxvZyhTdHJpbmcpOworICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7
IHJldHVybiBtX2xvZ0VuZFB0cjsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIaWdoRmlkZWxpdHlMb2csIG1fbG9nU3Rh
cnRQdHIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGlnaEZpZGVsaXR5TG9nLCBtX2N1cnJlbnRMb2dFbnRy
eVB0cik7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVIaWdoRmlkZWxpdHlMb2co
KTsKIAogICAgIHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5TG9nU2l6ZTsKLSAgICBzaXplX3QgbV9j
dXJyZW50T2Zmc2V0OwogICAgIExvZ0VudHJ5KiBtX2xvZ1N0YXJ0UHRyOwotICAgIExvZ0VudHJ5
KiBtX25leHRCdWZmZXI7Ci0KLSAgICBCeXRlU3BpbkxvY2sgbV9sb2NrOwotCi0gICAgc3RydWN0
IFRocmVhZERhdGEgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgIExvZ0VudHJ5KiBtX3Byb2Nl
c3NMb2dQdHI7Ci0gICAgICAgIHNpemVfdCBtX3Byb2NjZXNzTG9nVG9PZmZzZXQ7Ci0gICAgICAg
IEJ5dGVTcGluTG9ja2VyKiBtX2xvY2tlcjsKLSAgICB9OworICAgIExvZ0VudHJ5KiBtX2N1cnJl
bnRMb2dFbnRyeVB0cjsKKyAgICBMb2dFbnRyeSogbV9sb2dFbmRQdHI7CiB9OwogCiB9IC8vbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAxNzI1OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw3IEBAIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIAogdm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmxvZ1R5cGVz
Rm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiB7Ci0gICAgVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4KLSAgICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJp
YWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yVGhpc1N0YXRlbWVudAotICAgICAgICA6IFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JOb3JtYWw7CisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9y
ID0gbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0
ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gOiBUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsOwogCiAgICAgZGF0YUxvZ0YoIltTdGFydCwg
RW5kXTo6WyV1LCAldV1cbiIsIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rp
dm90RW5kKTsKIApAQCAtNDYsOSArNDQsNyBAQCB2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cjo6bG9nVHlwZXNGCiAgICAgZWxzZQogICAgICAgICBkYXRhTG9nKCJcdFx0W0VudHJ5IElTIE5P
VCBpbiBzeXN0ZW1dXG4iKTsKIAotICAgIGRhdGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0
YXRlbWVudF0iCi0gICAgICAgIDogbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdo
RmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gIltUaGlzIFN0YXRlbWVudF0iCi0gICAgICAgIDogIltO
b3JtYWwgU3RhdGVtZW50XSIsICJcbiIpOworICAgIGRhdGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+
bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/ICJbUmV0
dXJuIFN0YXRlbWVudF0iIDogIltOb3JtYWwgU3RhdGVtZW50XSIsICJcbiIpOwogCiAgICAgZGF0
YUxvZygiXHRcdCNMb2NhbCNcblx0XHQiLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQt
PnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsKICAgICBpZiAobG9j
YXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKQEAgLTkxLDEwICs4Nyw3IEBAIHN0YXRpYyBib29sIGRl
c2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW8KICAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJv
ZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xvYmFs
VmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQpICAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhp
Z2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxv
Y2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50
ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRl
bWVudCkgIAorICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JOb3JtYWwgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlS
ZXR1cm5TdGF0ZW1lbnQpICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
aWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDggKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvciB7CiAgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5v
cm1hbCA9IDEsCi0gICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQg
PSAyLAotICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDMK
KyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gPSAyCiB9Owog
CiBjbGFzcyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTcyNTk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsMTEgKzEwMyw2IEBAIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0p
CiAgICAgLCBtX2NhcHR1cmVFbmQoMCkKICAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVh
cldhdGNocG9pbnQpCiB7Ci0gICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVs
aXR5KCkpIHsKLSAgICAgICAgbV91bmlxdWVJRE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVl
SURNYXA+KCk7Ci0gICAgICAgIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwID0gc3RkOjptYWtlX3Vu
aXF1ZTxSZWdpc3RlclRvVmFyaWFibGVNYXA+KCk7Ci0gICAgICAgIG1fdW5pcXVlVHlwZVNldE1h
cCA9IHN0ZDo6bWFrZV91bmlxdWU8VW5pcXVlVHlwZVNldE1hcD4oKTsKLSAgICB9CiB9CiAKIFN5
bWJvbFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7IH0KQEAgLTE2NCw3MCArMTU5LDEwNCBAQCBTeW1i
b2xUYWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROCiAgICAgICAgICAgICByZXN1bHQt
Pm1fc2xvd0FyZ3VtZW50c1tpXSA9IG1fc2xvd0FyZ3VtZW50c1tpXTsKICAgICB9CiAKLSAgICBp
ZiAobV91bmlxdWVJRE1hcCAmJiByZXN1bHQtPm1fdW5pcXVlSURNYXApIHsKKyAgICBpZiAobV90
eXBlUHJvZmlsaW5nUmFyZURhdGEpIHsKKyAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdS
YXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVByb2ZpbGluZ1JhcmVEYXRhPigpOwogCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdW5pcXVlSURNYXAtPmJlZ2luKCk7
Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IG1fdW5pcXVlSURNYXAtPmVuZCgpOworICAgICAgICAg
ICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuYmVn
aW4oKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1f
dW5pcXVlSURNYXAuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgICAgICAgICByZXN1bHQtPm1fdW5pcXVlSURNYXAtPnNldChpdGVyLT5rZXks
IGl0ZXItPnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPm1fdHlwZVByb2ZpbGluZ1Jh
cmVEYXRhLT5tX3VuaXF1ZUlETWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fcmVnaXN0ZXJUb1Zh
cmlhYmxlTWFwLT5iZWdpbigpOwotICAgICAgICAgICAgYXV0byBlbmQgPSBtX3JlZ2lzdGVyVG9W
YXJpYWJsZU1hcC0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxp
bmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuYmVnaW4oKTsKKyAgICAgICAgICAg
IGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxl
TWFwLmVuZCgpOwogICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGl0ZXItPmtl
eSwgaXRlci0+dmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+bV90eXBlUHJvZmlsaW5n
UmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZh
bHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1f
dW5pcXVlVHlwZVNldE1hcC0+YmVnaW4oKTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gbV91bmlx
dWVUeXBlU2V0TWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIGF1
dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlVHlwZVNldE1hcC5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC0+bV91bmlxdWVUeXBlU2V0TWFwLT5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5tX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91
bmlxdWVUeXBlU2V0TWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKICAgICAgICAgfQog
ICAgIH0KLQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgU3ltYm9sVGFibGU6
OnByZXBhcmVGb3JIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImKQoreworICAgIGlmIChtX3R5cGVQcm9maWxpbmdSYXJlRGF0YSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV90eXBlUHJvZmlsaW5nUmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5
cGVQcm9maWxpbmdSYXJlRGF0YT4oKTsKKworICAgIGZvciAoYXV0byBpdGVyID0gbV9tYXAuYmVn
aW4oKSwgZW5kID0gbV9tYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAg
bV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGl0ZXItPmtleSwgSGln
aEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRpb24pOworICAgICAgICBtX3R5cGVQcm9maWxp
bmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuc2V0KGl0ZXItPnZhbHVlLmdldElu
ZGV4KCksIGl0ZXItPmtleSk7CisgICAgfQorfQorCiBHbG9iYWxWYXJpYWJsZUlEIFN5bWJvbFRh
YmxlOjp1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJp
bmdJbXBsKiBrZXksIFZNJiB2bSkKIHsKLSAgICBhdXRvIGl0ZXIgPSBtX3VuaXF1ZUlETWFwLT5m
aW5kKGtleSk7Ci0gICAgYXV0byBlbmQgPSBtX3VuaXF1ZUlETWFwLT5lbmQoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZVBy
b2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1JhcmVE
YXRhLT5tX3VuaXF1ZUlETWFwLmZpbmQoa2V5KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhLT5tX3VuaXF1ZUlETWFwLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkK
KyAgICAgICAgcmV0dXJuIEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7CiAKLSAgICBHbG9i
YWxWYXJpYWJsZUlEJiBpZCA9IGl0ZXItPnZhbHVlOworICAgIEdsb2JhbFZhcmlhYmxlSUQgaWQg
PSBpdGVyLT52YWx1ZTsKICAgICBpZiAoaWQgPT0gSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdl
bmVyYXRpb24pIHsKICAgICAgICAgaWQgPSB2bS5nZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpOwot
ICAgICAgICBtX3VuaXF1ZVR5cGVTZXRNYXAtPnNldChrZXksIFR5cGVTZXQ6OmNyZWF0ZSgpKTsg
Ly9tYWtlIGEgbmV3IGdsb2JhbCB0eXBlc2V0IGZvciB0aGUgSUQKKyAgICAgICAgbV90eXBlUHJv
ZmlsaW5nUmFyZURhdGEtPm1fdW5pcXVlSURNYXAuc2V0KGtleSwgaWQpOworICAgICAgICBtX3R5
cGVQcm9maWxpbmdSYXJlRGF0YS0+bV91bmlxdWVUeXBlU2V0TWFwLnNldChrZXksIFR5cGVTZXQ6
OmNyZWF0ZSgpKTsgLy8gTWFrZSBhIG5ldyBnbG9iYWwgdHlwZXNldCBmb3IgdGhpcyBjb3JyZXNw
b25kaW5nIElELgogICAgIH0KLSAgICAgICAgIAorCiAgICAgcmV0dXJuIGlkOwogfQogCiBHbG9i
YWxWYXJpYWJsZUlEIFN5bWJvbFRhYmxlOjp1bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSkKIHsKLSAg
ICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZmluZChyZWdpc3RlckluZGV4
KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlw
ZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIGF1dG8gaXRlciA9IG1fdHlwZVByb2ZpbGluZ1Jh
cmVEYXRhLT5tX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC5maW5kKHJlZ2lzdGVySW5kZXgpOworICAg
IGF1dG8gZW5kID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1fcmVnaXN0ZXJUb1ZhcmlhYmxl
TWFwLmVuZCgpOworICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgcmV0dXJuIEhpZ2hGaWRl
bGl0eU5vR2xvYmFsSURFeGlzdHM7CisKICAgICByZXR1cm4gdW5pcXVlSURGb3JWYXJpYWJsZShs
b2NrZXIsIGl0ZXItPnZhbHVlLmdldCgpLCB2bSk7CiB9CiAKIFJlZlB0cjxUeXBlU2V0PiBTeW1i
b2xUYWJsZTo6Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSkKIHsKLSAgICB1bmlxdWVJREZv
clJlZ2lzdGVyKGxvY2tlciwgcmVnaXN0ZXJJbmRleCwgdm0pOyAvL2Vuc3VyZSBpdCdzIGNyZWF0
ZWQKLSAgICBhdXRvIGl0ZXIgPSBtX3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+ZmluZChyZWdpc3Rl
ckluZGV4KTsKLSAgICBhdXRvIGVuZCA9IG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLT5lbmQoKTsK
LSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgaXRlciAhPSBlbmQpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIHVuaXF1ZUlERm9yUmVnaXN0ZXIobG9j
a2VyLCByZWdpc3RlckluZGV4LCB2bSk7IC8vIExhemlseSBjcmVhdGUgdGhlIFR5cGVTZXQgaWYg
bmVjZXNzYXJ5LgorCisgICAgYXV0byBpdGVyID0gbV90eXBlUHJvZmlsaW5nUmFyZURhdGEtPm1f
cmVnaXN0ZXJUb1ZhcmlhYmxlTWFwLmZpbmQocmVnaXN0ZXJJbmRleCk7CisgICAgYXV0byBlbmQg
PSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+bV9yZWdpc3RlclRvVmFyaWFibGVNYXAuZW5kKCk7
CisgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJl
dHVybiBnbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpdGVyLT52YWx1ZS5nZXQoKSwg
dm0pOwogfQogCiBSZWZQdHI8VHlwZVNldD4gU3ltYm9sVGFibGU6Omdsb2JhbFR5cGVTZXRGb3JW
YXJpYWJsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFN0cmluZ0ltcGwqIGtl
eSwgVk0mIHZtKQogewotICAgIHVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsK
LSAgICByZXR1cm4gbV91bmlxdWVUeXBlU2V0TWFwLT5maW5kKGtleSktPnZhbHVlOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhKTsKKworICAgIHVuaXF1ZUlERm9y
VmFyaWFibGUobG9ja2VyLCBrZXksIHZtKTsgLy8gTGF6aWx5IGNyZWF0ZSB0aGUgVHlwZVNldCBp
ZiBuZWNlc3NhcnkuCisKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVQcm9maWxpbmdSYXJlRGF0YS0+
bV91bmlxdWVUeXBlU2V0TWFwLmZpbmQoa2V5KTsKKyAgICBhdXRvIGVuZCA9IG1fdHlwZVByb2Zp
bGluZ1JhcmVEYXRhLT5tX3VuaXF1ZVR5cGVTZXRNYXAuZW5kKCk7CisgICAgaWYgKGl0ZXIgPT0g
ZW5kKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMiAr
NDE3LDYgQEAgcHVibGljOgogICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5
JiBlbnRyeSkKICAgICB7Ci0gICAgICAgIGlmIChtX3VuaXF1ZUlETWFwKSB7Ci0gICAgICAgICAg
ICAvLyBVc2UgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2UgbmVlZCB0byBwcm9kdWNlIGEgdW5p
cXVlIElELiBCZWNhdXNlIFZNIGlzIGluIGNoYXJnZSBvZiBjcmVhdGluZyB1bmlxdWVJRHMsIAot
ICAgICAgICAgICAgLy8gd2hlbiB1bmlxdWVJRCgpIGlzIGNhbGxlZCwgd2UgY2hlY2sgdGhpcyBm
bGFnIHRvIHNlZSBpZiB1bmlxdWVJRCBjcmVhdGlvbiBpcyBuZWNlc3NhcnkuCi0gICAgICAgICAg
ICBtX3VuaXF1ZUlETWFwLT5zZXQoa2V5LCBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJh
dGlvbik7IAotICAgICAgICAgICAgbV9yZWdpc3RlclRvVmFyaWFibGVNYXAtPnNldChlbnRyeS5n
ZXRJbmRleCgpLCBrZXkpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5
LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDM0LDEwICs0MjgsNiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHJp
bmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQogICAgIHsKLSAgICAg
ICAgaWYgKG1fdW5pcXVlSURNYXApIHsKLSAgICAgICAgICAgIG1fdW5pcXVlSURNYXAtPnNldChr
ZXksIEhpZ2hGaWRlbGl0eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uKTsgCi0gICAgICAgICAgICBt
X3JlZ2lzdGVyVG9WYXJpYWJsZU1hcC0+c2V0KGVudHJ5LmdldEluZGV4KCksIGtleSk7Ci0gICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG1fbWFwLnNldChrZXksIGVudHJ5KTsKICAgICB9CiAgICAg
CkBAIC00ODksNiArNDc5LDggQEAgcHVibGljOgogICAgIAogICAgIFN5bWJvbFRhYmxlKiBjbG9u
ZUNhcHR1cmVkTmFtZXMoVk0mKTsKIAorICAgIHZvaWQgcHJlcGFyZUZvckhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOworCiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKQEAgLTUxMyw5ICs1MDUsMTIgQEAgcHJpdmF0ZToKICAgICB+U3ltYm9sVGFi
bGUoKTsKIAogICAgIE1hcCBtX21hcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURNYXA+
IG1fdW5pcXVlSURNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyVG9WYXJpYWJsZU1h
cD4gbV9yZWdpc3RlclRvVmFyaWFibGVNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZVR5
cGVTZXRNYXA+IG1fdW5pcXVlVHlwZVNldE1hcDsKKyAgICBzdHJ1Y3QgVHlwZVByb2ZpbGluZ1Jh
cmVEYXRhIHsKKyAgICAgICAgVW5pcXVlSURNYXAgbV91bmlxdWVJRE1hcDsKKyAgICAgICAgUmVn
aXN0ZXJUb1ZhcmlhYmxlTWFwIG1fcmVnaXN0ZXJUb1ZhcmlhYmxlTWFwOworICAgICAgICBVbmlx
dWVUeXBlU2V0TWFwIG1fdW5pcXVlVHlwZVNldE1hcDsKKyAgICB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlUHJvZmlsaW5nUmFyZURhdGE+IG1fdHlwZVByb2ZpbGluZ1JhcmVEYXRhOwogCiAg
ICAgaW50IG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGJvb2wgbV91c2VzTm9u
U3RyaWN0RXZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2Nh
dGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gVHlwZUxvY2F0
CiAKICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBmYWxzZTsKICAgICBpZiAobV9sb2NhdGlvbk1h
cC5maW5kKGtleSkgPT0gbV9sb2NhdGlvbk1hcC5lbmQoKSkgewotICAgICAgICBUeXBlTG9jYXRp
b24qIGxvY2F0aW9uID0gdm0tPm5leHRMb2NhdGlvbigpOworICAgICAgICBUeXBlTG9jYXRpb24q
IGxvY2F0aW9uID0gdm0tPm5leHRUeXBlTG9jYXRpb24oKTsKICAgICAgICAgbG9jYXRpb24tPm1f
Z2xvYmFsVmFyaWFibGVJRCA9IGdsb2JhbFZhcmlhYmxlSUQ7CiAgICAgICAgIGxvY2F0aW9uLT5t
X3NvdXJjZUlEID0gc291cmNlSUQ7CiAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPSBz
dGFydDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShy
ZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTcgKzYyLDE2IEBAIFJ1bnRpbWVUeXBlIFR5cGVT
ZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAgICBlbHNlIGlmICh2LmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldCA9IFR5cGVPYmplY3Q7CiAgICAgZWxzZQotICAgICAgICBDUkFTSCgpOworICAgICAg
ICByZXQgPSBUeXBlTm90aGluZzsKIAogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgVHlwZVNl
dDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
c2hhcGUsIFN0cnVjdHVyZUlEIGlkKSAKK3ZvaWQgVHlwZVNldDo6YWRkVHlwZUluZm9ybWF0aW9u
KFJ1bnRpbWVUeXBlIHR5cGUsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlLCBTdHJ1
Y3R1cmVJRCBpZCkgCiB7Ci0gICAgUnVudGltZVR5cGUgdCA9IGdldFJ1bnRpbWVUeXBlRm9yVmFs
dWUodik7Ci0gICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHQ7CisgICAgbV9zZWVuVHlw
ZXMgPSBtX3NlZW5UeXBlcyB8IHR5cGU7CiAKLSAgICBpZiAoaWQgJiYgc2hhcGUgJiYgIXYuaXNT
dHJpbmcoKSAmJiAhdi5pc0Z1bmN0aW9uKCkpIHsKKyAgICBpZiAoaWQgJiYgc2hhcGUgJiYgdHlw
ZSAhPSBUeXBlU3RyaW5nKSB7CiAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9yeS5p
c1ZhbGlkS2V5KGlkKSk7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0b3J5
LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5lbmQo
KSkgewpAQCAtMjE4LDggKzIxNyw2IEBAIFN0cmluZyBUeXBlU2V0OjpkaXNwbGF5TmFtZSgpIGNv
bnN0CiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5
cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0CiB7CiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBpZiAobV9zZWVuVHlwZXMgJiBU
eXBlRnVuY3Rpb24pCi0gICAgICAgICBzZWVuLT5hZGRJdGVtKCJGdW5jdGlvbiIpOwogICAgIGlm
IChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpCiAgICAgICAgICBzZWVuLT5hZGRJdGVtKCJV
bmRlZmluZWQiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MjU5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNyArOTAsNyBAQCBjbGFzcyBUeXBlU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZVNlCiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZVNldD4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFR5cGVTZXQpOyB9CiAgICAgVHlwZVNldCgpOwotICAgIHZvaWQgYWRkVHlw
ZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVy
ZUlEKTsKKyAgICB2b2lkIGFkZFR5cGVJbmZvcm1hdGlvbihSdW50aW1lVHlwZSwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5cGUg
Z2V0UnVudGltZVR5cGVGb3JWYWx1ZShKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBT
dHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CiAgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzI1OTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5MSw2ICsxOTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBtX2VuYWJsZWRQcm9maWxlcihudWxscHRyKQogICAgICwgbV9idWlsdGluRXhl
Y3V0YWJsZXMoQnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGUoKnRoaXMpKQogICAgICwgbV9uZXh0
VW5pcXVlVmFyaWFibGVJRCgxKQorICAgICwgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5h
YmxlZENvdW50KDApCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMp
OwogICAgIFN0YWNrQm91bmRzIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CkBAIC0y
ODMsMTEgKzI4NCw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAvLyB3b24ndCB1c2UgdGhpcy4KICAgICBtX3R5cGVkQXJyYXlDb250cm9sbGVyID0gYWRv
cHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogCi0gICAgLy8gRklYTUU6
IGNvbmRpdGlvbmFsbHkgYWxsb2NhdGUgdGhpcyBzdHVmZiBiYXNlZCBvbiB3aGV0aGVyIG9yIG5v
dCB0aGUgaW5zcGVjdG9yIGlzIHJ1bm5pbmcgT1IgdGhpcyBmbGFnIGlzIGVuYWJsZWQgKG5vdCBq
dXN0IGlmIHRoZSBmbGFnIGlzIGVuYWJsZWQpLgotICAgIGlmIChPcHRpb25zOjpwcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKLSAgICAgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcj4oKTsKLSAgICAg
ICAgbV9oaWdoRmlkZWxpdHlMb2cgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hGaWRlbGl0eUxvZz4o
KTsKLSAgICB9CisgICAgaWYgKE9wdGlvbnM6OnByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkKKyAgICAgICAgZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOwogfQogCiBWTTo6
flZNKCkKQEAgLTg1OCw2ICs4NTYsNDMgQEAgdm9pZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExl
Z2FjeVByb2ZpbAogICAgIH0KIH0KIAorVHlwZUxvY2F0aW9uKiBWTTo6bmV4dFR5cGVMb2NhdGlv
bigpIAoreyAKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1fdHlwZUxvY2F0aW9uSW5mbyk7CisKKyAg
ICByZXR1cm4gbV90eXBlTG9jYXRpb25JbmZvLT5hZGQoKTsgCit9CisKK2Jvb2wgVk06OmVuYWJs
ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKQoreworICAgIGJvb2wgbmVlZHNUb1JlY29tcGls
ZSA9IGZhbHNlOworICAgIGlmICghbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENv
dW50KSB7CisgICAgICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+KCk7CisgICAgICAgIG1faGlnaEZpZGVsaXR5
TG9nID0gc3RkOjptYWtlX3VuaXF1ZTxIaWdoRmlkZWxpdHlMb2c+KCk7CisgICAgICAgIG1fdHlw
ZUxvY2F0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFnPFR5cGVMb2NhdGlvbj4+KCk7Cisg
ICAgICAgIG5lZWRzVG9SZWNvbXBpbGUgPSB0cnVlOworICAgIH0KKyAgICBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQrKzsKKworICAgIHJldHVybiBuZWVkc1RvUmVjb21w
aWxlOworfQorCitib29sIFZNOjpkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENv
dW50ID4gMCk7CisKKyAgICBib29sIG5lZWRzVG9SZWNvbXBpbGUgPSBmYWxzZTsKKyAgICBtX2hp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmFibGVkQ291bnQtLTsKKyAgICBpZiAoIW1faGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuYWJsZWRDb3VudCkgeworICAgICAgICBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlci5yZXNldChudWxscHRyKTsKKyAgICAgICAgbV9oaWdoRmlkZWxpdHlMb2cu
cmVzZXQobnVsbHB0cik7CisgICAgICAgIG1fdHlwZUxvY2F0aW9uSW5mby5yZXNldChudWxscHRy
KTsKKyAgICAgICAgbmVlZHNUb1JlY29tcGlsZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IG5lZWRzVG9SZWNvbXBpbGU7Cit9CisKIHZvaWQgVk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxp
bmdUeXBlcygpCiB7CiAgICAgaWYgKCFpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KQpAQCAtODY1LDcgKzkwMCw3IEBAIHZvaWQgVk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdU
eXBlcygKIAogICAgIGhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJW
TSBEdW1wIFR5cGVzIik7CiAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBwcm9maWxlciA9
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOwotICAgIGZvciAoQmFnPFR5cGVMb2Nh
dGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xvY2F0aW9uSW5mby5iZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikgeworICAgIGZvciAoQmFnPFR5cGVMb2NhdGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3R5
cGVMb2NhdGlvbkluZm8tPmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSAqaXRlcjsKICAgICAgICAgcHJvZmlsZXItPmxvZ1R5cGVzRm9y
VHlwZUxvY2F0aW9uKGxvY2F0aW9uKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw5ICs0OTYsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyBy
ZXR1cm4gbV9idWlsdGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0KIAogICAgICAgICBib29sIGlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkgeyByZXR1cm4gISFtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcjsgfQorICAgICAgICBib29sIGVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxp
bmcoKTsKKyAgICAgICAgYm9vbCBkaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOwog
ICAgICAgICBIaWdoRmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0dXJuIG1faGln
aEZpZGVsaXR5TG9nLmdldCgpOyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciog
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIuZ2V0KCk7IH0KLSAgICAgICAgVHlwZUxvY2F0aW9uKiBuZXh0TG9jYXRpb24oKSB7IHJl
dHVybiBtX2xvY2F0aW9uSW5mby5hZGQoKTsgfSAvL1RPRE86IHBvc3NpYmxlIG9wdG1pemF0aW9u
OiB3aGVuIGNvZGVibG9ja3MgZGllLCByZXBvcnQgd2hpY2ggbG9jYXRpb25zIGFyZSBubyBsb25n
ZXIgYmVpbmcgY2hhbmdlZCBzbyB3ZSBkb24ndCB3YWxrIG92ZXIgdGhlbQorICAgICAgICBUeXBl
TG9jYXRpb24qIG5leHRUeXBlTG9jYXRpb24oKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wSGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKTsKICAgICAgICAgR2xvYmFsVmFy
aWFibGVJRCBnZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpIHsgcmV0dXJuIG1fbmV4dFVuaXF1ZVZh
cmlhYmxlSUQrKzsgfQogCkBAIC01NTMsNyArNTU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI+IG1faGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaEZpZGVsaXR5TG9n
PiBtX2hpZ2hGaWRlbGl0eUxvZzsKICAgICAgICAgR2xvYmFsVmFyaWFibGVJRCBtX25leHRVbmlx
dWVWYXJpYWJsZUlEOwotICAgICAgICBCYWc8VHlwZUxvY2F0aW9uPiBtX2xvY2F0aW9uSW5mbzsK
KyAgICAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5hYmxlZENvdW50
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFnPFR5cGVMb2NhdGlvbj4+IG1fdHlwZUxvY2F0
aW9uSW5mbzsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzI1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNC0wOC0xNCAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBoaWdoIGZpZGVsaXR5IHR5cGUgcHJvZmls
aW5nIHRvIGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUGFnZVJ1bnRpbWVBZ2VudCBhbmQgV29ya2VyUnVudGlt
ZUFnZW50IG5vdyBjYWxsIHRoZWlyIHN1cGVyIAorICAgICAgICBjbGFzcydzIChJbnNwZWN0b3JS
dW50aW1lQWdlbnQpIGltcGxlbWVudGF0aW9uIG9mIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kCisgICAgICAgIHRvIGdpdmUgSW5zcGVjdG9yUnVudGltZUFnZW50IGEgY2hhbmNlIHRvIHJl
Y29tcGlsZSBhbGwgSmF2YVNjcmlwdAorICAgICAgICBmdW5jdGlvbnMsIGlmIG5lY2Vzc2FyeSwg
Zm9yIHR5cGUgcHJvZmlsaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVudGltZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZCk6CisKIDIwMTQtMDgtMTQgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBub25SZW5kZXJlclN0eWxlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lv
biAxNzI1OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEzICs2NywxNSBAQCB2b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rv
clJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlz
KTsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKQordm9pZCBQYWdlUnVudGltZUFnZW50Ojp3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uIHJl
YXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIGRp
c2FibGUoJmVycm9yU3RyaW5nKTsKKworICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQocmVhc29uKTsKIH0KIAogdm9pZCBQYWdlUnVudGltZUFn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MjU5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMSBAQCB2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6
ZGlkQ3JlYXRlRnJvbnRlCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJ1bnRp
bWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0K
IAotdm9pZCBXb3JrZXJSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXNvbiByZWFz
b24pCiB7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOworCisgICAgSW5zcGVjdG9y
UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChyZWFzb24pOwogfQog
CiBJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZh
bChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>