<?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>123164</bug_id>
          
          <creation_ts>2013-10-22 09:00:44 -0700</creation_ts>
          <short_desc>FTL should be able to do some simple inline caches using LLVM patchpoints</short_desc>
          <delta_ts>2013-10-23 11:20:56 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122739</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>942319</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 09:00:44 -0700</bug_when>
    <thetext>This tracks the initial prototype of patchpoint-based inline caches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942320</commentid>
    <comment_count>1</comment_count>
      <attachid>214860</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 09:06:14 -0700</bug_when>
    <thetext>Created attachment 214860
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942323</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 09:08:19 -0700</bug_when>
    <thetext>Attachment 214860 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
Source/WTF/wtf/BitVector.h:271:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 39 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>942324</commentid>
    <comment_count>3</comment_count>
      <attachid>214860</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 09:10:29 -0700</bug_when>
    <thetext>Comment on attachment 214860
the patch

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

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41
&gt;&gt; +        
&gt; 
&gt; When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60
&gt;&gt; +    GPRReg result, GPRReg callFrameRegister, StructureStubInfo*, GPRReg object,
&gt; 
&gt; The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

No.

&gt;&gt; Source/WTF/wtf/BitVector.h:271
&gt;&gt; +        if (sizeof(uintptr_t) == 4)
&gt; 
&gt; An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]

Lame.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942336</commentid>
    <comment_count>4</comment_count>
      <attachid>214860</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-22 09:53:59 -0700</bug_when>
    <thetext>Comment on attachment 214860
the patch

Attachment 214860 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/8848347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942418</commentid>
    <comment_count>5</comment_count>
      <attachid>214886</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 14:45:47 -0700</bug_when>
    <thetext>Created attachment 214886
the patch

rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942421</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 14:48:59 -0700</bug_when>
    <thetext>Attachment 214886 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
Source/WTF/wtf/BitVector.h:271:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 39 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>942433</commentid>
    <comment_count>7</comment_count>
      <attachid>214886</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-22 15:23:44 -0700</bug_when>
    <thetext>Comment on attachment 214886
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942443</commentid>
    <comment_count>8</comment_count>
      <attachid>214886</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-22 15:31:50 -0700</bug_when>
    <thetext>Comment on attachment 214886
the patch

Attachment 214886 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/9358001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942527</commentid>
    <comment_count>9</comment_count>
    <who name="Nadav Rotem">nrotem</who>
    <bug_when>2013-10-22 17:42:28 -0700</bug_when>
    <thetext>// This code relies on us being 64-bit. FTL is currently always 64-bit.
static const size_t wordSize = 8;

Can you add an assertion ?


 82        size_t stackAlignment = 16;
 
Is this the right place for this constant ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942536</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 17:49:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; // This code relies on us being 64-bit. FTL is currently always 64-bit.
&gt; static const size_t wordSize = 8;
&gt; 
&gt; Can you add an assertion ?

I could.  Though there are already a bunch of such assertions throughout the FTL.

&gt; 
&gt; 
&gt;  82        size_t stackAlignment = 16;
&gt; 
&gt; Is this the right place for this constant ?

Maybe, maybe not?  We don&apos;t currently have anywhere to put it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942543</commentid>
    <comment_count>11</comment_count>
      <attachid>214916</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 18:10:24 -0700</bug_when>
    <thetext>Created attachment 214916
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942544</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 18:11:31 -0700</bug_when>
    <thetext>Attachment 214916 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
Source/WTF/wtf/BitVector.h:271:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 39 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>942545</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 18:12:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Attachment 214916 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
&gt; Source/WTF/wtf/BitVector.h:271:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:41:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]

Oops, I will fix 2/3 of these, I promise.

&gt; Total errors found: 3 in 39 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942550</commentid>
    <comment_count>14</comment_count>
      <attachid>214916</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-22 18:52:27 -0700</bug_when>
    <thetext>Comment on attachment 214916
patch for landing

Attachment 214916 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/9328046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942551</commentid>
    <comment_count>15</comment_count>
      <attachid>214918</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-22 18:54:33 -0700</bug_when>
    <thetext>Created attachment 214918
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942554</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-22 19:29:42 -0700</bug_when>
    <thetext>Attachment 214918 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/assembler/LinkBuffer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLocation.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCall.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.h&apos;, u&apos;Source/JavaScriptCore/jit/CCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/GPRInfo.h&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlineCacheGenerator.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.cpp&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/BitVector.cpp&apos;, u&apos;Source/WTF/wtf/BitVector.h&apos;, u&apos;Source/WTF/wtf/HashTraits.h&apos;, u&apos;Source/WTF/wtf/StdLibExtras.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLSlowPathCall.h:60:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 39 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>942755</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-23 11:20:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/157872</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214860</attachid>
            <date>2013-10-22 09:06:14 -0700</date>
            <delta_ts>2013-10-22 14:45:47 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84638</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Nzk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5n
IExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIEdldEJ5SWQgaW5saW5lIGNhY2hlcyBp
biB0aGUgRlRMIHVzaW5nIGxsdm0ud2Via2l0LnBhdGNocG9pbnQuCisgICAgICAgIAorICAgICAg
ICBUaGUgaWRlYSBpcyB0aGF0IHdlIGFzayBMTFZNIGZvciBhIG5vcCBzbGlkZSB0aGUgc2l6ZSBv
ZiBhIEdldEJ5SWQgaW5saW5lCisgICAgICAgIGNhY2hlIGFuIHRoZW4gZmlsbCBpbiB0aGUgY29k
ZSBhZnRlciBMTFZNIGNvbXBpbGF0aW9uIGlzIGNvbXBsZXRlLiBGb3Igbm93LCB3ZQorICAgICAg
ICBqdXN0IHVzZSB0aGUgc3lzdGVtIGNhbGxpbmcgY29udmVudGlvbiBmb3IgdGhlIGFyZ3VtZW50
cyBhbmQgcmV0dXJuLiBXZSBhbHNvCisgICAgICAgIHN0aWxsIG1ha2Ugc29tZSBhc3N1bXB0aW9u
cyBhYm91dCByZWdpc3RlcnMgdGhhdCBhcmVuJ3QgY29ycmVjdC4gQnV0LCBtb3N0IG9mCisgICAg
ICAgIHRoZSBzY2FmZm9sZGluZyBpcyB0aGVyZSBhbmQgdGhpcyB3aWxsIHN1Y2Nlc3NmdWxseSBw
YXRjaCBhbiBpbmxpbmUgY2FjaGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkpOgorICAgICAg
ICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
bGluayk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
RlRMOjpjb25zdE51bGwpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGls
ZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hl
RGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpJbmxpbmVDYWNoZURlc2Ny
aXB0b3I6OklubGluZUNhY2hlRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6R2V0QnlJ
ZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpHZXRC
eUlkRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6R2V0QnlJZERl
c2NyaXB0b3I6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5SWREZXNjcmlw
dG9yOjp1aWQpOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpz
aXplT2ZQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6IEFkZGVk
LgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6CisgICAg
ICAgICogZnRsL0ZUTExvY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb2NhdGlvbjo6
ZGlyZWN0R1BSKToKKyAgICAgICAgKiBmdGwvRlRMTG9jYXRpb24uaDoKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlJZCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6Y2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAq
IGZ0bC9GVExTbG93UGF0aENhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6U2xvd1Bh
dGhDYWxsOjpTbG93UGF0aENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsOjprZXkpOgorICAgICAgICAq
IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpT
bG93UGF0aENhbGxLZXk6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpTbG93UGF0aENh
bGxLZXkpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6dXNlZFJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpjYWxsVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6Om9mZnNldCk6CisgICAgICAgIChKU0M6
OkZUTDo6U2xvd1BhdGhDYWxsS2V5Ojppc0VtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6
OlNsb3dQYXRoQ2FsbEtleTo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OlNs
b3dQYXRoQ2FsbEtleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhD
YWxsS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoOjplcXVhbCk6Cisg
ICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tN
YXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKToKKyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmg6
CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmdldFNsb3dQ
YXRoQ2FsbFRodW5rKToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHMpOgorICAgICAgICAqIGppdC9HUFJJbmZv
Lmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2FyYmFnZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdl
bmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEJlZ2luKToKKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFsbEdQUnMpOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6YWxsRlBScyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjphbGxSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZHVtcCk6CisgICAgICAgICogaml0L1Jl
Z2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpleGNsdWRlKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51bWJlck9mU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6
OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojppc0RlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldEhhc2g6Omhh
c2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0xMC0yMiAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlh
bmNlQGNpc2NvLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNTc2OTAsIHIxNTc2OTkpIEZp
eCBhcmNoaXRlY3R1cmVzIHVzaW5nIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3NzA3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAkJMEYyNEU1NTYxN0YwQjcx
QzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGlu
ZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU3MTdG
NzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3
QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2
MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1
RjFBRTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBNzE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjAxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGlu
ZUNhY2hlU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNUYxQTkxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIxMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbC5jcHAgKi87IH07CisJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFCMzE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovOyB9OworCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhD
YWxsS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4
NCw2ICsxMzkxLDEzIEBACiAJCTBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZy
YW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU3MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFy
cmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElubGluZUNhY2hlRGVzY3JpcHRv
ci5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTElubGlu
ZUNhY2hlU2l6ZS5jcHA7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQTkxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElu
bGluZUNhY2hlU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExJbmxp
bmVDYWNoZVNpemUuaDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93
UGF0aENhbGwuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxs
Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
S2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbEtl
eS5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QUExN0I2QjUzRDAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzMz
LDYgKzI3NDcsOSBAQAogCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAogCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKKwkJCQkwRjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi8sCisJCQkJMEYyNUYxQTgxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgKi8sCisJCQkJMEYyNUYxQTkxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYy
M0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEy
MjE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLAogCQkJCTBG
RUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLywKQEAgLTI3NTcsNiAr
Mjc3NCwxMCBAQAogCQkJCTBGRUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAq
LywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICov
LAogCQkJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovLAor
CQkJCTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwICovLAor
CQkJCTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLywKKwkJ
CQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLywK
KwkJCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi8s
CiAJCQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCiAJ
CQkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBG
RUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCkBAIC00MzkwLDYgKzQ0
MTEsNyBAQAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxOTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFCMjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQxQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxQjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDUwNyw2ICs0NTI5LDcgQEAKIAkJ
CQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNs
b3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNUYxQUUxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0Ix
N0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC00NjUyLDYgKzQ2NzUsNyBAQAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0
RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQz
N0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1
RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVy
ZUNoYWluLmggaW4gSGVhZGVycyAqLywKQEAgLTQ3MDAsNiArNDcyNCw3IEBACiAJCQkJQkMxOEM0
MjAwRTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjYx
NzI4MTc3NEUwMzUwMDQ5NUIwMCAvKiBWTVN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRv
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNTE2OCw2ICs1MTkzLDcgQEAKIAkJCQkxNDdGMzlD
MTEwN0VDMzc2MDA0MjdBNDggLyogQ29tbW9uSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcwOUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1Bh
dGhzRXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1
MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
M0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9v
dHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTgxLDYgKzUyMDcsNyBAQAogCQkJCTBGRDhBMzFC
MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERl
YnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQzQSAv
KiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERD
RERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTU0NSw2ICs1NTcyLDcgQEAKIAkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEExNThFQkU5MTAwNENCOUZG
IC8qIHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZG
IC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUFGMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NDI3NDMxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5jIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNDI3NEQxNThFQkZFNjAwNENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hvbGRlci5jIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NDUxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0
LmMgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTc3MDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODE4LDE0ICs4MTgsMTUgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgQXNzZW1ibGVyVHlwZTo6Y2FjaGVGbHVzaChjb2RlLCBzaXplKTsKICAgICB9CisK
KyAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOworICAgIAogcHJvdGVjdGVkOgogICAgIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIoKQogICAgICAgICA6IG1fcmFuZG9tU291cmNlKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpCiAgICAgewogICAgIH0KIAotICAgIEFzc2VtYmxlclR5
cGUgbV9hc3NlbWJsZXI7Ci0gICAgCiAgICAgdWludDMyX3QgcmFuZG9tKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX3JhbmRvbVNvdXJjZS5nZXRVaW50MzIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMTU3NzA3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsNyArMzcsMTEgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVy
OjpmaW5hbGl6ZQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKICAgICAKLSAgICByZXR1
cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIEFTU0VSVChtX2RpZEFsbG9jYXRl
KTsKKyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICByZXR1cm4gQ29kZVJlZiht
X2V4ZWN1dGFibGVNZW1vcnkpOworICAgIAorICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKG1fY29kZSkpOwogfQogCiBMaW5r
QnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShj
b25zdCBjaGFyKiBmb3JtYXQsIC4uLikKQEAgLTEzNCw3ICsxMzgsNiBAQCB2b2lkIExpbmtCdWZm
ZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAKIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUo
dm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBBU1NF
UlQoIW1fY29kZSk7CiAjaWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICBBc3NlbWJs
ZXJCdWZmZXImIGJ1ZmZlciA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5idWZmZXIoKTsKICAg
ICBhbGxvY2F0ZShidWZmZXIuY29kZVNpemUoKSwgb3duZXJVSUQsIGVmZm9ydCk7CkBAIC0xNTEs
NiArMTU0LDE1IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUodm9pZCogb3duZXJVSUQKIAog
dm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CisgICAgaWYgKG1fY29kZSkgewor
ICAgICAgICBpZiAoaW5pdGlhbFNpemUgPiBtX3NpemUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBtX2RpZEFsbG9jYXRlID0gdHJ1ZTsKKyAgICAgICAgbV9zaXplID0g
aW5pdGlhbFNpemU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgbV9leGVjdXRh
YmxlTWVtb3J5ID0gbV92bS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgaW5p
dGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk0LDYgKzk0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgbGlua0NvZGUob3duZXJV
SUQsIGVmZm9ydCk7CiAgICAgfQogCisgICAgTGlua0J1ZmZlcihWTSYgdm0sIE1hY3JvQXNzZW1i
bGVyKiBtYXNtLCB2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6
ZSkKKyNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCisgICAgICAgICwgbV9pbml0aWFsU2l6
ZSgwKQorI2VuZGlmCisgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxzZSkKKyAgICAgICAgLCBt
X2NvZGUoY29kZSkKKyAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQorICAgICAgICAsIG1fdm0o
JnZtKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKKyNlbmRp
ZgorICAgIHsKKyAgICAgICAgbGlua0NvZGUoMCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAg
ICB9CisKICAgICB+TGlua0J1ZmZlcigpCiAgICAgewogICAgIH0KQEAgLTExNyw2ICsxMzMsMTEg
QEAgcHVibGljOgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSgpLCBjYWxs
LCBmdW5jdGlvbik7CiAgICAgfQogICAgIAorICAgIHZvaWQgbGluayhDYWxsIGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsIGxhYmVsKQorICAgIHsKKyAgICAgICAgbGluayhjYWxsLCBGdW5jdGlvblB0
cihsYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgbGlu
ayhKdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQogICAgIHsKICAgICAgICAganVt
cC5tX2xhYmVsID0gYXBwbHlPZmZzZXQoanVtcC5tX2xhYmVsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNTc3MDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIGVudW0gQml0RXh0ZW5zaW9uIHsgWmVyb0V4dGVuZCwg
U2lnbkV4dGUKIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0SW50KExUeXBlIHR5cGUsIHVuc2ln
bmVkIGxvbmcgbG9uZyB2YWx1ZSwgQml0RXh0ZW5zaW9uIGV4dGVuc2lvbiA9IFplcm9FeHRlbmQp
IHsgcmV0dXJuIGxsdm0tPkNvbnN0SW50KHR5cGUsIHZhbHVlLCBleHRlbnNpb24gPT0gU2lnbkV4
dGVuZCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0UmVhbChMVHlwZSB0eXBlLCBkb3Vi
bGUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0UmVhbCh0eXBlLCB2YWx1ZSk7IH0KIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIGNvbnN0SW50VG9QdHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IHJldHVybiBsbHZtLT5Db25zdEludFRvUHRyKHZhbHVlLCB0eXBlKTsgfQorc3RhdGljIGlubGlu
ZSBMVmFsdWUgY29uc3ROdWxsKExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0TnVsbCh0
eXBlKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RCaXRDYXN0KExWYWx1ZSB2YWx1ZSwg
TFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RCaXRDYXN0KHZhbHVlLCB0eXBlKTsgfQog
CiBzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxvY2soTENvbnRleHQgY29u
dGV4dCwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lID0gIiIpIHsgcmV0dXJuIGxs
dm0tPkFwcGVuZEJhc2ljQmxvY2tJbkNvbnRleHQoY29udGV4dCwgZnVuY3Rpb24sIG5hbWUpOyB9
CkBAIC0yNDgsNiArMjQ5LDE2IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVp
bGRlciAKICAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0IH07CiAg
ICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNCk7CiB9CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwg
TFZhbHVlIGFyZzUpCit7CisgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwgYXJnNSB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3MsIDUpOworfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJn
MywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikKK3sKKyAgICBMVmFsdWUg
YXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07CisgICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNik7Cit9CiBlbnVtIFRhaWxD
YWxsTW9kZSB7IElzTm90VGFpbENhbGwsIElzVGFpbENhbGwgfTsKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXRUYWlsQ2FsbChMVmFsdWUgY2FsbCwgVGFpbENhbGxNb2RlIG1vZGUpIHsgbGx2bS0+U2V0
VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQogc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFn
Z1ZhbCwgaW5kZXgsICIiKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCAr
OTQsMTMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEludDUyVG9WYWx1
ZToKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdl
dEJ5SWQ6CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGlmIChpc1R5cGVkVmlldyhu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSkKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAx
NTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKICNpbmNs
dWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKQEAgLTExMCw2
ICsxMTEsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
U3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS5n
cmFwaC5tX3ZtOworICAgIFN0YWNrTWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7
CiAKICAgICBFeGl0VGh1bmtHZW5lcmF0b3IgZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKTsKICAg
ICBleGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5rcygpOwpAQCAtMTM2LDYgKzEzOCw4MiBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIHN0YXRlLmZp
bmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXIgPSBsaW5rQnVmZmVyLnJlbGVhc2UoKTsKICAg
ICB9CiAKKyAgICBpZiAoIXN0YXRlLmdldEJ5SWRzLmlzRW1wdHkoKSkgeworICAgICAgICBDQ2Fs
bEhlbHBlcnMgc2xvd1BhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdldEJ5SWRzW2ldOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRl
ciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGlm
IChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBv
cHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRl
ci0+dmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShyZWNvcmQp
OyAvLyBGSVhNRTogdXNlIEFueVJlZ3MuCisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNo
b3VsZCB0ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMDsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIxOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJldHVyblZhbHVl
R1BSOworICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHQpLCBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAg
ICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHQsCisgICAgICAgICAgICAgICAgY2FsbEZyYW1lUmVnaXN0ZXIs
IGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0aERvbmUgPSBzbG93UGF0aEpJVC5qdW1w
KCk7CisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yID0gZ2VuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlciA9IGFk
b3B0UHRyKAorICAgICAgICAgICAgbmV3IExpbmtCdWZmZXIodm0sICZzbG93UGF0aEpJVCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5nZXRCeUlkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIEdldEJ5SWREZXNjcmlwdG9yJiBnZXRCeUlkID0gc3RhdGUuZ2V0QnlJZHNbaV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9w
dGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVy
LT52YWx1ZTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0
aChmYXN0UGF0aEpJVCk7CisKKyAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CisgICAgICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQu
aW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZH
ZXRCeUlkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDKTsKKyAgICAgICAgICAgIC8v
IE5vdGU6IHdlIGNvdWxkIGhhbmRsZSB0aGUgIWlzVmFsaWQoKSBjYXNlLiBXZSBqdXN0IGRvbid0
IGFwcGVhciB0byBoYXZlIGEKKyAgICAgICAgICAgIC8vIHJlYXNvbiB0byBkbyBzbywgeWV0Lgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+
bGluaygKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fc2xvd1BhdGhEb25lLCBDb2RlTG9jYXRp
b25MYWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvci5z
bG93UGF0aEp1bXAoKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2Rl
TGlua0J1ZmZlci0+bG9jYXRpb25PZihnZXRCeUlkLm1fZ2VuZXJhdG9yLnNsb3dQYXRoQmVnaW4o
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmZpbmFs
aXplKGxpbmtCdWZmZXIsICpzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRDb2RlLT5v
c3JFeGl0LnNpemUoKTsgZXhpdEluZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Jf
aAorI2RlZmluZSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitj
bGFzcyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgeworcHVibGljOgorICAgIElubGluZUNhY2hlRGVz
Y3JpcHRvcigpIHsgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhE
b25lOworfTsKKworY2xhc3MgR2V0QnlJZERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVE
ZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRCeUlkRGVzY3JpcHRvcigpIHsgfQorICAgIAor
ICAgIEdldEJ5SWREZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3RhY2ttYXBJRChzdGFja21h
cElEKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIG1fdWlk
KHVpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25z
dCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX2NvZGVPcmlnaW47IH0KKyAgICBTdHJpbmdJbXBsKiB1aWQoKSBjb25z
dCB7IHJldHVybiBtX3VpZDsgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNr
bWFwSUQ7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgU3RyaW5nSW1wbCogbV91
aWQ7CisKK3B1YmxpYzoKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIG1fZ2VuZXJhdG9yOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKKyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TElubGluZUNhY2hlU2l6ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RhdGljIHNpemVfdCBzX3NpemVP
ZkdldEJ5SWQ7CitzdGF0aWMgc2l6ZV90IHNfc2l6ZU9mUHV0QnlJZDsKKworc2l6ZV90IHNpemVP
ZkdldEJ5SWQoKQoreworICAgIGlmIChzX3NpemVPZkdldEJ5SWQpCisgICAgICAgIHJldHVybiBz
X3NpemVPZkdldEJ5SWQ7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgaml0OworICAgIAorICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAorICAgICAgICAwLCBDb2RlT3JpZ2luKCks
IFJlZ2lzdGVyU2V0KCksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmVnVDcpLAorICAgICAgICBmYWxzZSk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRl
RmFzdFBhdGgoaml0KTsKKyAgICAKKyAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkID0gaml0Lm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7Cit9CisKK3NpemVfdCBzaXplT2ZQdXRCeUlkKCkKK3sKKyAg
ICBpZiAoc19zaXplT2ZQdXRCeUlkKQorICAgICAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwK
KyAgICAgICAgR1BSSW5mbzo6cmVnVDgsIGZhbHNlLCBOb3RTdHJpY3RNb2RlLCBOb3REaXJlY3Qp
OworICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJu
IHNfc2l6ZU9mUHV0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSW5saW5lQ2FjaGVTaXplX2gK
KyNkZWZpbmUgRlRMSW5saW5lQ2FjaGVTaXplX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCk7
CitzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hlU2l6
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8obXVsV2l0
aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUo
c3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAog
ICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTMy
IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGlu
dDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1Yi53
aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50
NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCisgICAgbWFjcm8od2Via2l0UGF0Y2hwb2lu
dEludDY0LCAibGx2bS53ZWJraXQucGF0Y2hwb2ludC5pNjQiLCBmdW5jdGlvblR5cGUoaW50NjQs
IGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1hY3JvKHdlYmtp
dFN0YWNrbWFwLCAibGx2bS53ZWJraXQuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0udHJhcCIs
IGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKICAgICBtYWNybyhvc3JFeGl0LCAid2Via2l0X29z
cl9leGl0IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwgVmFyaWFkaWMp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRG
aW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyNCBAQCBib29sIEpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0
aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2Rl
QmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2Ug
dGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAK
KyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKSB7CisgICAgICAgIC8vIFNpZGUgY29kZSBpcyBm
b3Igc3BlY2lhbCBzbG93IHBhdGhzIHRoYXQgd2UgZ2VuZXJhdGUgb3Vyc2VsdmVzLCBsaWtlIGZv
ciBpbmxpbmUKKyAgICAgICAgLy8gY2FjaGVzLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2xvd1BhdGhDYWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFNsb3dQ
YXRoQ2FsbCYgY2FsbCA9IHNsb3dQYXRoQ2FsbHNbaV07CisgICAgICAgICAgICBzaWRlQ29kZUxp
bmtCdWZmZXItPmxpbmsoCisgICAgICAgICAgICAgICAgY2FsbC5jYWxsKCksCisgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobV9wbGFuLnZtLmZ0bFRodW5rcy0+Z2V0U2xvd1BhdGhD
YWxsVGh1bmsobV9wbGFuLnZtLCBjYWxsLmtleSgpKS5jb2RlKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAorICAg
ICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZlciwKKyAgICAgICAgICAgICgiRlRMIHNpZGUgY29k
ZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAg
ICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7CisgICAgfQorICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgp
KQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlv
bk9mKGFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRG
aW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFNs
b3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTUwLDYgKzUxLDggQEAgcHVibGlj
OgogCiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwogICAgIE93
blB0cjxMaW5rQnVmZmVyPiBlbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBPd25QdHI8TGlua0J1
ZmZlcj4gc2lkZUNvZGVMaW5rQnVmZmVyOworICAgIFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQ
YXRoQ2FsbHM7IC8vIENhbGxzIGluc2lkZSB0aGUgc2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JF
eGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBh
cml0eUNoZWNrOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODAsNiArMTgwLDEyIEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRvKE1hY3JvQXNz
ZW1ibGUKICNlcnJvciAiQ1BVIGFyY2hpdGVjdHVyZSBub3Qgc3VwcG9ydGVkLiIKICNlbmRpZiAv
LyBDUFUgY2FzZXMgZm9yIExvY2F0aW9uIG1ldGhvZHMKIAorR1BSUmVnIExvY2F0aW9uOjpkaXJl
Y3RHUFIoKSBjb25zdAoreworICAgIEFTU0VSVCghYWRkZW5kKCkpOworICAgIHJldHVybiBncHIo
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiBuYW1lc3BhY2UgV1RGIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzR1BSKCkgY29uc3Q7
CiAgICAgYm9vbCBpbnZvbHZlc0dQUigpIGNvbnN0OwogICAgIEdQUlJlZyBncHIoKSBjb25zdDsK
KyAgICBHUFJSZWcgZGlyZWN0R1BSKCkgY29uc3Q7IC8vIEdldCB0aGUgR1BSIGFuZCBhc3NlcnQg
dGhhdCB0aGVyZSBpcyBubyBhZGRlbmQuCiAgICAgCiAgICAgYm9vbCBpc0ZQUigpIGNvbnN0Owog
ICAgIEZQUlJlZyBmcHIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZh
bHVlLmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMTG93
ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgpAQCAtMTIyMiwyMiArMTIyMywyOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldEJ5SWQoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSAwOworICAgICAg
ICAvLyBVbnR5cGVkVXNlIGlzIGEgYml0IGhhcmRlciB0byByZWFzb24gYWJvdXQgYW5kIEknbSBu
b3Qgc3VyZSBob3cgYmVzdCB0byBkbyBpdCwgeWV0LgorICAgICAgICAvLyBCYXNpY2FsbHkgd2Ug
bmVlZCB0byBlbWl0IGEgY2VsbCBicmFuY2ggdGhhdCB0YWtlcyB5b3UgdG8gdGhlIHNsb3cgcGF0
aCwgYnV0IHRoZSBzbG93CisgICAgICAgIC8vIHBhdGggaXMgZ2VuZXJhdGVkIGJ5IHRoZSBJQyBn
ZW5lcmF0b3Igc28gd2UgY2FuJ3QganVtcCB0byBpdCBmcm9tIGhlcmUuIEFuZCB0aGUgSUMKKyAg
ICAgICAgLy8gZ2VuZXJhdG9yIGN1cnJlbnRseSBkb2Vzbid0IGtub3cgaG93IHRvIGVtaXQgc3Vj
aCBhIGJyYW5jaC4gU28sIGZvciBub3csIHdlIGp1c3QKKyAgICAgICAgLy8gcmVzdHJpY3QgdGhp
cyB0byBDZWxsVXNlLgorICAgICAgICBBU1NFUlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSk7CiAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6Ci0gICAgICAgICAgICBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFN0cmluZ0ltcGwq
IHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07
CisKKyAgICAgICAgaWYgKCFPcHRpb25zOjpmdGxJQ1VzZXNQYXRjaHBvaW50KCkpIHsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlk
KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmludFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRy
KHVpZCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIC8vIEFy
Z3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KKyAgICAgICAgdW5z
aWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQud2Via2l0UGF0Y2hwb2ludEludDY0SW50cmlu
c2ljKCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5j
b25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQu
cmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CiAgICAgICAg
IAotICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZCksIG1fY2FsbEZyYW1lLCBtX291dC5pbnRQdHJaZXJv
LCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAgIG1fZnRsU3RhdGUuZ2V0
QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9y
aWdpbiwgdWlkKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE1Nzcw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0OCw2ICszNDgsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1
bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1
aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykgeyByZXR1cm4g
YnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMpOyB9CiAgICAg
TFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExW
YWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVu
Y3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOyB9CisgICAgTFZhbHVlIGNhbGwoTFZhbHVl
IGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUg
YXJnNCwgTFZhbHVlIGFyZzUpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9u
LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsgfQorICAgIExWYWx1ZSBjYWxsKExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVl
IGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVp
bGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOyB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIExWYWx1ZSBvcGVy
YXRpb24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgY29kZSByZWxpZXMgb24gdXMg
YmVpbmcgNjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2NC1iaXQuCitzdGF0aWMgY29u
c3Qgc2l6ZV90IHdvcmRTaXplID0gODsKKyAgICAgICAgCisvLyBUaGlzIHdpbGwgYmUgYW4gUkFJ
SSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrIHNpemVzIGFuZCBv
ZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgQ2FsbENvbnRleHQgeworcHVibGljOgorICAgIENhbGxD
b250ZXh0KAorICAgICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKKyAgICAgICAgdW5zaWduZWQgbnVtQXJncywgR1BS
UmVnIHJldHVyblJlZ2lzdGVyKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICwg
bV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgICAgICwgbV9qaXQoaml0KQorICAg
ICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICAgICAsIG1fcmV0dXJuUmVnaXN0ZXIocmV0
dXJuUmVnaXN0ZXIpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3Jl
IHVzaW5nIGNhbGxlZS1zYXZlIG9yIHN0YWNrIHJlZ2lzdGVycy4KKyAgICAgICAgbV91c2VkUmVn
aXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICBt
X3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIgZG9lc24ndCBuZWVk
IHRvIGJlIHNhdmVkLgorICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmNsZWFyKG1fcmV0dXJuUmVnaXN0ZXIp
OworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRy
ZXNzID0gd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9
CisgICAgICAgICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5n
ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VN
RU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRS
ZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgICAg
ICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZysrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAg
ICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKworICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdp
c3RlcnNUaGF0TmVlZFNhdmluZyAqIHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgbV9zdGFj
a0J5dGVzTmVlZGVkID0KKyAgICAgICAgICAgIG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhICsKKyAg
ICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzICsKKyAgICAgICAgICAg
IChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bUFyZ3VtZW50UmVn
aXN0ZXJzVGhhdE5lZWRTYXZpbmcpICogd29yZFNpemU7CisgICAgICAgIAorICAgICAgICBzaXpl
X3Qgc3RhY2tBbGlnbm1lbnQgPSAxNjsKKyAgICAgICAgCisgICAgICAgIG1fc3RhY2tCeXRlc05l
ZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0FsaWdubWVudCAtIDEpICYgfihzdGFj
a0FsaWdubWVudCAtIDEpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3ViUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgbV90aHVua1NhdmVTZXQgPSBt
X3VzZWRSZWdpc3RlcnM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6
Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykgeworICAg
ICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdp
c3RlcihpKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJSZWcg
cmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAg
ICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7CisgICAgfQorICAg
IAorICAgIH5DYWxsQ29udGV4dCgpCisgICAgeworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG1f
bnVtQXJncyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChH
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rlcihp
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAq
IHdvcmRTaXplKSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RodW5r
U2F2ZVNldDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2Fs
bEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgb2Zm
c2V0KCkpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtYWtlQ2FsbCh2
b2lkKiBjYWxsVGFyZ2V0KQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmVz
dWx0ID0gbV9qaXQuY2FsbCgpOworICAgICAgICBtX3N0YXRlLmZpbmFsaXplci0+c2xvd1BhdGhD
YWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgcmVzdWx0LCBrZXlXaXRoVGFy
Z2V0KGNhbGxUYXJnZXQpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBTdGF0ZSYgbV9zdGF0ZTsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdp
c3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3M7
CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZp
bmdBcmVhOworICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgUmVnaXN0ZXJTZXQg
bV90aHVua1NhdmVTZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisg
ICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIAorICAgIEpfSklUT3BlcmF0aW9uX0VTc2lKSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciwKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEdQUlJlZyBvYmplY3QsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDYWxs
Q29udGV4dCBjb250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Cisg
ICAgaml0LnNldHVwQXJndW1lbnRzKAorICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqZWN0LAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7CisgICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwo
Yml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb24pKTsKKyAgICAvLyBGSVhNRTogRlRMIHNob3Vs
ZCBzdXBwb3J0IGV4Y2VwdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMU2xvd1BhdGhDYWxsX2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhDYWxsX2gKKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRlRMU2xv
d1BhdGhDYWxsS2V5LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgU3RhdGU7CisKK2NsYXNzIFNsb3dQYXRoQ2FsbCB7CitwdWJsaWM6CisgICAgU2xvd1Bh
dGhDYWxsKCkgeyB9CisgICAgCisgICAgU2xvd1BhdGhDYWxsKE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgICAgICA6IG1fY2FsbChjYWxs
KQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwoKSBjb25zdCB7IHJldHVybiBtX2NhbGw7IH0KKyAgICBTbG93UGF0
aENhbGxLZXkga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOworICAgIFNsb3dQYXRoQ2FsbEtleSBtX2tl
eTsKK307CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUm
LCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIEpfSklUT3BlcmF0aW9uX0VTc2lK
SSwKKyAgICBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIsIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKKyAgICBTdHJpbmdJbXBsKiB1aWQpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTFNsb3dQYXRoQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsS2V5
LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCit2b2lkIFNsb3dQYXRoQ2FsbEtleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiPHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMs
ICIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlciht
X2NhbGxUYXJnZXQpLCAiPiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisjZGVmaW5lIEZUTFNsb3dQYXRoQ2FsbEtl
eV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyB1c2VkIGZvciBj
cmVhdGluZyBzb21lIHNhbml0eSBpbiBzbG93LXBhdGggY2FsbHMgb3V0IG9mIHRoZSBGVEwncyBp
bmxpbmUKKy8vIGNhY2hlcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBkb24ndCB3YW50IGFsbCBvZiB0
aGUgcmVnaXN0ZXIgc2F2ZS9yZXN0b3JlIHN0dWZmIHRvCisvLyBiZSBnZW5lcmF0ZWQgYXQgZWFj
aCBJQyBzaXRlLiBJbnN0ZWFkLCB0aGUgSUMgc2xvdyBwYXRoIGNhbGwgc2l0ZSB3aWxsIGp1c3Qg
c2F2ZQorLy8gdGhlIHJlZ2lzdGVycyBuZWVkZWQgZm9yIHRoZSBhcmd1bWVudHMuIEl0IHdpbGwg
YXJyYW5nZSBmb3IgdGhlcmUgdG8gYmUgZW5vdWdoCisvLyBzcGFjZSBvbiB0b3Agb2Ygc3RhY2sg
dG8gc2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhbmQgdGhlIHJldHVybiBQQy4gVGhlbiBp
dAorLy8gd2lsbCBjYWxsIGEgc2hhcmVkIHRodW5rIHRoYXQgd2lsbCBzYXZlIHRoZSByZW1haW5p
bmcgcmVnaXN0ZXJzLiBUaGF0IHRodW5rIG5lZWRzCisvLyB0byBrbm93IHRoZSBzdGFjayBvZmZz
ZXQgYXQgd2hpY2ggdGhpbmdzIGdldCBzYXZlZCBhbG9uZyB3aXRoIHRoZSBjYWxsIHRhcmdldC4K
KworLy8gTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgKm5vdCBpbmNsdWRpbmcqIHRoZSByZXR1cm4g
UEMgdGhhdCB3b3VsZCBiZSBwdXNoZWQgb24gWDg2LgorCitjbGFzcyBTbG93UGF0aENhbGxLZXkg
eworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbEtleSgpCisgICAgICAgIDogbV9jYWxsVGFyZ2V0
KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNsb3dQ
YXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCB2b2lkKiBjYWxsVGFyZ2V0LCBwdHJk
aWZmX3Qgb2Zmc2V0KQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhzZXQpCisgICAgICAgICwg
bV9jYWxsVGFyZ2V0KGNhbGxUYXJnZXQpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBj
b25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICB2b2lkKiBjYWxsVGFyZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CisgICAgcHRyZGlmZl90IG9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9Owor
ICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgU2xv
d1BhdGhDYWxsS2V5KEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0OjpFbXB0eVZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAg
ICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXko
RGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6
RGVsZXRlZFZhbHVlKQorICAgICAgICAsIG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zm
c2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5pc0VtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNEZWxldGVkVmFs
dWUoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTbG93UGF0aENhbGxLZXkm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycyA9PSBv
dGhlci5tX3VzZWRSZWdpc3RlcnMKKyAgICAgICAgICAgICYmIG1fY2FsbFRhcmdldCA9PSBvdGhl
ci5tX2NhbGxUYXJnZXQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
OworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3VzZWRSZWdpc3RlcnMuaGFzaCgpICsgUHRySGFzaDx2b2lkKj46Omhhc2gobV9jYWxsVGFy
Z2V0KSArIG1fb2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3Vz
ZWRSZWdpc3RlcnM7CisgICAgdm9pZCogbV9jYWxsVGFyZ2V0OworICAgIHB0cmRpZmZfdCBtX29m
ZnNldDsKK307CisKK3N0cnVjdCBTbG93UGF0aENhbGxLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYSwgY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4geworICAgIHR5cGVkZWYgSlNDOjpGVEw6OlNs
b3dQYXRoQ2FsbEtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsS2V5PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93UGF0
aENhbGxLZXk+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFNsb3dQYXRoQ2FsbEtleV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE1NzcwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNiArNzMsMTEgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFBy
aW50U3RyZQogICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJmUmVnTnVtLCAi
LCAiLCBvZmZzZXQsICIpIik7CiB9CiAKK0dQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJl
Y3RHUFIoU3RhY2tNYXBzJiBzdGFja21hcHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZUTDo6TG9j
YXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5kaXJlY3RHUFIoKTsKK30KKwog
dm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKICAgICBNYWNyb0Fzc2VtYmxl
ciYgaml0LCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJl
ZyByZXN1bHQpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
Y2tNYXBzLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IFN0
YWNrTWFwcyB7CiAgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1bnNpZ25lZCYgb2Zmc2V0
KTsKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgICAgICAK
KyAgICAgICAgR1BSUmVnIGRpcmVjdEdQUihTdGFja01hcHMmKSBjb25zdDsKICAgICAgICAgdm9p
ZCByZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlciYsIFN0YWNrTWFwcyYsIGNoYXIqIHNhdmVkUmVn
aXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdDsKICAgICB9OwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgi
CiAjaW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRM
SklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCkBAIC01Niw2ICs1Nyw3
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBHZW5lcmF0ZWRG
dW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsK
KyAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFZl
Y3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRh
U2VjdGlvbk5hbWVzOwogICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFw
c1NlY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShy
ZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9zckV4aXRHZW5lcmF0aW9uVwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIGZvciBjYWxsRnJhbWUgYXQgJXMi
LCB0b0NTdHJpbmcobG9jYXRpb24pLmRhdGEoKSkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxL
ZXkmIGtleSkKK3sKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KCZ2bSwgMCk7CisgICAgCisgICAg
Ly8gV2Ugd2FudCB0byBzYXZlIHRoZSBnaXZlbiByZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNl
dCwgdGhlbiB3ZSB3YW50IHRvIHNhdmUgdGhlCisgICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNv
bWV3aGVyZSBwYXN0IHRoYXQgb2Zmc2V0LCBhbmQgdGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFr
ZSB0aGUKKyAgICAvLyBjYWxsLgorICAgIAorICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0ID0ga2V5
Lm9mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKKyAgICAKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQorICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyNlbmRpZgorICAgIAor
ICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6
OmZpcnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsg
cmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7
CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBqaXQuc3RvcmVQdHIocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0
KSk7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICB9CisgICAg
CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1i
bGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdp
c3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEPihy
ZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3JlRG91YmxlKHJlZywgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
Y3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZihkb3VibGUp
OworICAgIH0KKyAgICAKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIw
LCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBrZXkub2Zmc2V0KCkpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
ID0gaml0LmNhbGwoKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkp
LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5yZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcgPSBNYWNy
b0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6RlBSZWdpc3RlcklEPihyZWcgLSAxKSkgeworICAgICAgICBpZiAoa2V5LnVzZWRS
ZWdpc3RlcnMoKS5nZXQocmVnKSkgeworICAgICAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXpl
b2YoZG91YmxlKTsKKyAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZz
ZXQpLCByZWcpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6
OmZpcnN0RlBSZWdpc3RlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxh
c3RSZWdpc3RlcigpOyA7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihyZWcgLSAxKSkgeworICAgICAgICBpZiAoa2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVn
KSkgeworICAgICAgICAgICAgY3VycmVudE9mZnNldCAtPSBzaXplb2Yodm9pZCopOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlZyA9PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGppdC5yZXQoKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIodm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5r
IGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiRlRMTG9jYXRpb24uaCIKKyNpbmNs
dWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC00Myw2ICs0NCw3IEBAIG5hbWVz
cGFjZSBGVEwgewogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uV2l0aG91
dFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBMb2Nh
dGlvbiYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9y
KFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5
cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKQEAgLTY1LDggKzY3LDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0R2Vu
ZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xv
d1BhdGhDYWxsS2V5JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vz
c2FyeSgKKyAgICAgICAgICAgIHZtLCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0
aENhbGxUaHVua0dlbmVyYXRvcik7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICBIYXNoTWFw
PExvY2F0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fb3NyRXhpdFRodW5rczsKKyAgICBI
YXNoTWFwPFNsb3dQYXRoQ2FsbEtleSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3Nsb3dQYXRo
Q2FsbFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTU3NzA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTA2LDYgKzkwNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzEsIGFyZzIp
OwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoR1BS
UmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW1QdHIg
YXJnNCkKKyAgICB7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFyZzMpOworICAgICAgICBtb3Zl
KGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnNCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIzKTsKKyAgICB9CisgICAgCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzKFRydXN0ZWRJbW1QdHIgYXJnMSkKICAgICB7CiAgICAgICAgIG1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BS
SW5mby5oCShyZXZpc2lvbiAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQ
UkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogI2lmIENQVShYODYpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMg
MAorI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDB1CiAKIGNsYXNzIEdQUklu
Zm8gewogcHVibGljOgpAQCAtMzQyLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lm
IENQVShYODZfNjQpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNgorI2Rl
ZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDZ1CiAKIGNsYXNzIEdQUkluZm8gewog
cHVibGljOgpAQCAtNDIzLDcgKzQyMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShB
Uk0pCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1C
RVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDR1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpA
QCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShBUk02NCkKLSNk
ZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4CisjZGVmaW5lIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMgOHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC01OTAs
NyArNTkwLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKE1JUFMpCi0jZGVmaW5lIE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTIDR1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpAQCAtNjU4LDcgKzY1OCw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShTSDQpCi0jZGVmaW5lIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMgNAorI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
IDR1CiAKIGNsYXNzIEdQUkluZm8gewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK3N0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmZvKCkKK3sK
KyAgICBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbmV3IFN0cnVjdHVyZVN0
dWJJbmZvKCk7CisgICAgcmV0dXJuIHN0dWJJbmZvOworfQorCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKIHsKLSAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9
IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKCkgOiBnYXJiYWdlU3R1Yklu
Zm8oKTsKICAgICBtX3N0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKIH0KIApAQCAt
NjMsMjkgKzY5LDM0IEBAIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAjZW5k
aWYKIH0KIAotdm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0
UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgpCiB7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxs
UmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsKTsKKyAgICBDb2Rl
TG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9j
YWxsKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9j
YXRpb247CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCA9IE1hY3Jv
QXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7CisgICAgICAg
IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9jYXRpb24p
OwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9j
YXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNrKSk7CisgICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUNoZWNr
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxU
b0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigK
LSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9sb2Fk
T3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9u
T2YobV9sb2FkT3JTdG9yZSkpOwogI2Vsc2UKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV90YWdMb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRo
LmxvY2F0aW9uT2YobV90YWdMb2FkT3JTdG9yZSkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZh
c3RQYXRoLmxvY2F0aW9uT2YobV9sb2FkT3JTdG9yZSkpOwogI2VuZGlmCiAgICAgbV9zdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
IHNsb3dQYXRoLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CiAgICAgbV9zdHViSW5mby0+
cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9kb25lKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRp
b25PZihtX2RvbmUpKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0b3JhZ2VM
b2FkID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0b3Jh
Z2VMb2FkKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25P
ZihtX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKK30KKwordm9pZCBKSVRCeUlkR2VuZXJhdG9yOjpm
aW5hbGl6ZShMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGZpbmFsaXplKGxpbmtCdWZm
ZXIsIGxpbmtCdWZmZXIpOwogfQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGhDaGVja3MoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIGJ1dHRlcmZseSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsMTAgQEAg
cHVibGljOgogICAgICAgICBtX2NhbGwgPSBjYWxsOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1BhdGhC
ZWdpbjsgfQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoSnVtcCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlQ2hlY2subV9qdW1wOyB9CiAKKyAgICB2b2lkIGZpbmFsaXplKExp
bmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVm
ZmVyKTsKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImKTsKICAgICAKIHByb3RlY3RlZDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCShyZXZpc2lv
biAxNTc3MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1S
ZWdpc3RlclNldCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpCitSZWdpc3RlclNldCBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKQogewogICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsK
LSAgICByZXN1bHQuc2V0KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICByZXN1bHQu
c2V0KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNl
dChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkKK3sK
KyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisgICAgcmVzdWx0Lm1lcmdlKHN0YWNrUmVnaXN0ZXJz
KCkpOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKQEAgLTQ2LDYg
KzUzLDUyIEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXIKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworI2lmIENQVShYODZfNjQpCisg
ICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OmVieCk7CisgICAgcmVzdWx0LnNldChYODZSZWdp
c3RlcnM6OmVicCk7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMCk7CisgICAgcmVz
dWx0LnNldChYODZSZWdpc3RlcnM6OnIxMik7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6
OnIxMyk7CisgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxNCk7CisgICAgcmVzdWx0LnNl
dChYODZSZWdpc3RlcnM6OnIxNSk7CisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBpbnN0cnVj
dGlvbiBzZXQiCisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNldCBS
ZWdpc3RlclNldDo6YWxsR1BScygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIGZv
ciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0g
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyArIDEpKQorICAgICAg
ICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQg
UmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICBm
b3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7
IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyArIDEp
KQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVn
aXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQg
cmVzdWx0OworICAgIHJlc3VsdC5tZXJnZShhbGxHUFJzKCkpOworICAgIHJlc3VsdC5tZXJnZShh
bGxGUFJzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVnaXN0ZXJTZXQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBtX3ZlY3Rvci5kdW1wKG91dCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NzcwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsMTIgQEAgY2xhc3MgUmVnaXN0ZXJTZXQgewogcHVibGljOgogICAgIFJlZ2lz
dGVyU2V0KCkgeyB9CiAgICAgCisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0YWNrUmVnaXN0ZXJz
KCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNwZWNpYWxSZWdpc3RlcnMoKTsKKyAgICBzdGF0
aWMgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIHN0YXRpYyBSZWdpc3Rl
clNldCBhbGxHUFJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEZQUnMoKTsKKyAgICBz
dGF0aWMgUmVnaXN0ZXJTZXQgYWxsUmVnaXN0ZXJzKCk7CiAKICAgICB2b2lkIHNldChHUFJSZWcg
cmVnLCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7CkBAIC03NiwxMyArODEsNTUgQEAgcHVibGlj
OgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChN
YWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVy
Z2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVj
dG9yKTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92
ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVy
T2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgZW51bSBF
bXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsg
RGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRW1wdHlWYWx1ZVRhZykKKyAg
ICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5VmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92ZWN0b3Io
Qml0VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlz
RW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlWYWx1ZSgpOyB9Cisg
ICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRGVsZXRl
ZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQorICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgQml0VmVjdG9yIG1fdmVjdG9yOwogfTsKIAorc3RydWN0IFJlZ2lzdGVy
U2V0SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnaXN0ZXJTZXQmIHNl
dCkgeyByZXR1cm4gc2V0Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJl
Z2lzdGVyU2V0JiBhLCBjb25zdCBSZWdpc3RlclNldCYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpSZWdpc3RlclNldD4geworICAgIHR5cGVkZWYgSlNDOjpSZWdpc3RlclNl
dEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRz
OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiA6IHB1Ymxp
YyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8gUmVnaXN0ZXJTZXRf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MTU3NzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25S
YW5nZTsKICAgICB2KGJvb2wsIGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcsIGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxP
U1JFeGl0VXNlc1N0YWNrbWFwLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZnRsSUNVc2VzUGF0Y2hw
b2ludCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1PU1JFeGl0SW50cmluc2ljLCBmYWxz
ZSkgXAogICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxsdm1B
bHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3Nzk2
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBA
QAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5n
IExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBuZWVkZWQgc29tZSBiZXR0ZXIgYml0dmVjdG9yIHN1cHBv
cnQsIGxpa2UgbWVyZ2luZyAofD0pLCBleGNsdWRpbmcgKCY9fiksCisgICAgICAgIGhhc2hpbmcs
IGFuZCBiaXQgY291bnRpbmcuCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAg
ICAgKFdURjo6Qml0VmVjdG9yOjpzZXRTbG93KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpl
eGNsdWRlU2xvdyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KToKKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6aGFzaFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpkdW1wKToK
KyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWVy
Z2UpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6OmJpdENvdW50KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpCaXRWZWN0b3Ip
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6
OkJpdFZlY3Rvcjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Omlz
RW1wdHlPckRlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aGFzaCk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvckhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3JIYXNoOjplcXVhbCk6Cisg
ICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKFdURjo6Q3VzdG9tSGFzaFRyYWl0
czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6Q3VzdG9tSGFzaFRyYWl0
czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpDdXN0b21IYXNoVHJhaXRzOjplbXB0
eVZhbHVlKToKKyAgICAgICAgKFdURjo6Q3VzdG9tSGFzaFRyYWl0czo6aXNFbXB0eVZhbHVlKToK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6OmJpdENvdW50KToK
KwogMjAxMy0xMC0yMSAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIE1ha2UgVFlQRV9DQVNUU19CQVNFIG1vcmUgZmxleGlibGUKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmNwcAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXVEYgewog
dm9pZCBCaXRWZWN0b3I6OnNldFNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKIHsKICAgICB1
aW50cHRyX3QgbmV3Qml0c09yUG9pbnRlcjsKLSAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkKKyAg
ICBpZiAob3RoZXIuaXNJbmxpbmUoKSB8fCBvdGhlci5pc0VtcHR5T3JEZWxldGVkVmFsdWUoKSkK
ICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKICAgICBl
bHNlIHsKICAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGlu
ZUJpdHM6OmNyZWF0ZShvdGhlci5zaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5l
Qml0cy0+Yml0cygpLCBvdGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5zaXplKCkpKTsKICAg
ICAgICAgbmV3Qml0c09yUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9m
TGluZUJpdHMpID4+IDE7CiAgICAgfQotICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICBpZiAoIWlz
SW5saW5lKCkgJiYgIWlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgpKQogICAgICAgICBPdXRPZkxpbmVC
aXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CiAgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3
Qml0c09yUG9pbnRlcjsKIH0KQEAgLTEyNCw3ICsxMjQsNTkgQEAgdm9pZCBCaXRWZWN0b3I6Om1l
cmdlU2xvdyhjb25zdCBCaXRWZWN0bwogICAgICAgICBhLT5iaXRzKClbaV0gfD0gYi0+Yml0cygp
W2ldOwogfQogCi12b2lkIEJpdFZlY3Rvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQordm9pZCBC
aXRWZWN0b3I6OmV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCit7CisgICAgaWYg
KG90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICAg
ICAgKmJpdHMoKSAmPSB+Y2xlYW5zZUlubGluZUJpdHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAg
ICAgICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIg
Jj0gfipvdGhlci5vdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICAgICAgbV9iaXRzT3JQb2lu
dGVyIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7Cisg
ICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBPdXRPZkxpbmVCaXRzKiBhID0gb3V0T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9m
TGluZUJpdHMqIGIgPSBvdGhlci5vdXRPZkxpbmVCaXRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RkOjptaW4oYS0+bnVtV29yZHMoKSwgYi0+bnVtV29yZHMoKSk7IGktLTspCisgICAgICAg
IGEtPmJpdHMoKVtpXSAmPSB+Yi0+Yml0cygpW2ldOworfQorCitzaXplX3QgQml0VmVjdG9yOjpi
aXRDb3VudFNsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29u
c3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICBzaXplX3QgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQor
ICAgICAgICByZXN1bHQgKz0gYml0Q291bnQoYml0cy0+Yml0cygpW2ldKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVj
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1dCBw
cm9iYWJseSBnb29kIGVub3VnaCBmb3Igbm93LgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6
bWF4KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgeworICAgICAgICBpZiAoZ2V0KGkpICE9
IG90aGVyLmdldChpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3VpbnRwdHJfdCBCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFpc0lubGluZSgpKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBi
aXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgIHVpbnRwdHJfdCByZXN1bHQgPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IGJpdHMtPm51bVdvcmRzKCk7IGktLTspCisgICAgICAgIHJlc3VsdCBe
PSBiaXRzLT5iaXRzKClbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0
b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChnZXQoaSkpCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAkocmV2aXNpb24gMTU3NzA3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xNzYsOSArMTc4LDY2IEBAIHB1
YmxpYzogCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9iaXRzT3JQ
b2ludGVyIHw9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5l
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CisgICAg
dm9pZCBleGNsdWRlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
IWlzSW5saW5lKCkgfHwgIW90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgICAgIGV4Y2x1ZGVT
bG93KG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Jp
dHNPclBvaW50ZXIgJj0gfm90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgbV9iaXRzT3JQ
b2ludGVyIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7
CisgICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJp
dENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJpdENvdW50KGNsZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRlcikpOwor
ICAgICAgICByZXR1cm4gYml0Q291bnRTbG93KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcg
eyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUg
fTsKKyAgICAKKyAgICBCaXRWZWN0b3IoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX2JpdHNP
clBvaW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvcihEZWxldGVkVmFs
dWVUYWcpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKDEpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2JpdHNPclBvaW50ZXI7
IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2lu
dGVyID09IDE7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYml0c09yUG9pbnRlciA8PSAxOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJ
bmxpbmUoKSAmJiBvdGhlci5pc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYml0c09y
UG9pbnRlciA9PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiBlcXVhbHNT
bG93Q2FzZShvdGhlcik7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGhhc2guIEp1c3QgeG9yIHRv
Z2V0aGVyIHRoZSB3b3JkcyB0aGF0IGhvbGQgdGhlIHZhcmlvdXMKKyAgICAgICAgLy8gYml0cyBh
bmQgdGhlbiBjb21wdXRlIHRoZSBoYXNoLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWFs
IHdpdGggYml0dmVjdG9ycworICAgICAgICAvLyB0aGF0IGhhdmUgYSBsb3Qgb2YgdHJhaWxpbmcg
emVybydzLgorICAgICAgICB1aW50cHRyX3QgdmFsdWU7CisgICAgICAgIGlmIChpc0lubGluZSgp
KQorICAgICAgICAgICAgdmFsdWUgPSBjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNPclBvaW50ZXIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZSA9IGhhc2hTbG93Q2FzZSgpOworICAg
ICAgICByZXR1cm4gSW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKKyAgICB9CiAgICAg
CiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKQEAgLTIwNyw2
ICsyNjYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGJpdHMgJiB+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKICAgICB9CiAgICAgCisgICAgc3Rh
dGljIHNpemVfdCBiaXRDb3VudCh1aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIGlmIChz
aXplb2YodWludHB0cl90KSA9PSA0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6Yml0Q291bnQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6Yml0Q291bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHMpKTsKKyAgICB9
CisgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBz
aXplX3QgbnVtQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQpAQCAtMjM2LDYgKzMw
MywxMiBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFNsb3coY29u
c3QgQml0VmVjdG9yJiBvdGhlcik7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
bWVyZ2VTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOworICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzaXplX3QgYml0Q291bnRTbG93KCkgY29uc3Q7CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBv
dGhlcikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xvd0Nh
c2UoKSBjb25zdDsKICAgICAKICAgICB1aW50cHRyX3QqIGJpdHMoKQogICAgIHsKQEAgLTI1NCw2
ICszMjcsMjAgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOwogfTsK
IAorc3RydWN0IEJpdFZlY3Rvckhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEJpdFZlY3RvciYgdmVjdG9yKSB7IHJldHVybiB2ZWN0b3IuaGFzaCgpOyB9CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgQml0VmVjdG9yJiBhLCBjb25zdCBCaXRWZWN0b3ImIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxCaXRWZWN0b3I+IHsKKyAg
ICB0eXBlZGVmIEJpdFZlY3Rvckhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxCaXRWZWN0
b3I+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8Qml0VmVjdG9yPiB7IH07CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkJpdFZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJ
KHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiwzNCBAQCBzdHJ1Y3QgTnVsbGFibGVIYXNoVHJhaXRzIDog
cHVibGljIEhhc2hUCiAgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VD4oMSk7IH0KIH07CiAKKy8vIFVzZWZ1bCBmb3IgY2xhc3NlcyB0aGF0IHdhbnQg
Y29tcGxldGUgY29udHJvbCBvdmVyIHdoYXQgaXMgZW1wdHkgYW5kIHdoYXQgaXMgZGVsZXRlZCwK
Ky8vIGFuZCBob3cgdG8gY29uc3RydWN0IGJvdGguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IEN1c3RvbUhhc2hUcmFpdHMgOiBwdWJsaWMgR2VuZXJpY0hhc2hUcmFpdHM8VD4geworICAg
IHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgCisgICAgc3Rh
dGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpCisgICAgeworICAgICAgICBu
ZXcgKE5vdE51bGwsICZzbG90KSBUKFQ6OkRlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBUIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQoVDo6RW1wdHlWYWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBUJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0VtcHR5VmFsdWUoKTsKKyAgICB9Cit9
OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpIYXNoVHJhaXRzOwpJbmRleDog
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE1NzcwNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0
ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDExIEBAIGlubGluZSBz
aXplX3QgYml0Q291bnQodW5zaWduZWQgYml0cykKICAgICByZXR1cm4gKCgoYml0cyArIChiaXRz
ID4+IDQpKSAmIDB4RjBGMEYwRikgKiAweDEwMTAxMDEpID4+IDI0OwogfQogCitpbmxpbmUgc2l6
ZV90IGJpdENvdW50KHVpbnQ2NF90IGJpdHMpCit7CisgICAgcmV0dXJuIGJpdENvdW50KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihiaXRzKSkgKyBiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Yml0cyA+PiAzMikpOworfQorCiAvLyBNYWNybyB0aGF0IHJldHVybnMgYSBjb21waWxlIHRpbWUg
Y29uc3RhbnQgd2l0aCB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LCBidXQgZ2l2ZXMgYW4gZXJyb3Ig
aWYgcGFzc2VkIGEgbm9uLWFycmF5LgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IFNpemU+
IGNoYXIgKCZBcnJheUxlbmd0aEhlbHBlckZ1bmN0aW9uKFQgKCYpW1NpemVdKSlbU2l6ZV07CiAv
LyBHQ0MgbmVlZHMgc29tZSBoZWxwIHRvIGRlZHVjZSBhIDAgbGVuZ3RoIGFycmF5Lgo=
</data>
<flag name="commit-queue"
          id="237477"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214886</attachid>
            <date>2013-10-22 14:45:47 -0700</date>
            <delta_ts>2013-10-22 18:10:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84597</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5n
IExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIEdldEJ5SWQgaW5saW5lIGNhY2hlcyBp
biB0aGUgRlRMIHVzaW5nIGxsdm0ud2Via2l0LnBhdGNocG9pbnQuCisgICAgICAgIAorICAgICAg
ICBUaGUgaWRlYSBpcyB0aGF0IHdlIGFzayBMTFZNIGZvciBhIG5vcCBzbGlkZSB0aGUgc2l6ZSBv
ZiBhIEdldEJ5SWQgaW5saW5lCisgICAgICAgIGNhY2hlIGFuIHRoZW4gZmlsbCBpbiB0aGUgY29k
ZSBhZnRlciBMTFZNIGNvbXBpbGF0aW9uIGlzIGNvbXBsZXRlLiBGb3Igbm93LCB3ZQorICAgICAg
ICBqdXN0IHVzZSB0aGUgc3lzdGVtIGNhbGxpbmcgY29udmVudGlvbiBmb3IgdGhlIGFyZ3VtZW50
cyBhbmQgcmV0dXJuLiBXZSBhbHNvCisgICAgICAgIHN0aWxsIG1ha2Ugc29tZSBhc3N1bXB0aW9u
cyBhYm91dCByZWdpc3RlcnMgdGhhdCBhcmVuJ3QgY29ycmVjdC4gQnV0LCBtb3N0IG9mCisgICAg
ICAgIHRoZSBzY2FmZm9sZGluZyBpcyB0aGVyZSBhbmQgdGhpcyB3aWxsIHN1Y2Nlc3NmdWxseSBw
YXRjaCBhbiBpbmxpbmUgY2FjaGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkpOgorICAgICAg
ICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
bGluayk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
RlRMOjpjb25zdE51bGwpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGls
ZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hl
RGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpJbmxpbmVDYWNoZURlc2Ny
aXB0b3I6OklubGluZUNhY2hlRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6R2V0QnlJ
ZERlc2NyaXB0b3I6OkdldEJ5SWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpHZXRC
eUlkRGVzY3JpcHRvcjo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6R2V0QnlJZERl
c2NyaXB0b3I6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5SWREZXNjcmlw
dG9yOjp1aWQpOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpz
aXplT2ZQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6IEFkZGVk
LgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6CisgICAg
ICAgICogZnRsL0ZUTExvY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb2NhdGlvbjo6
ZGlyZWN0R1BSKToKKyAgICAgICAgKiBmdGwvRlRMTG9jYXRpb24uaDoKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlJZCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6Y2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAq
IGZ0bC9GVExTbG93UGF0aENhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6U2xvd1Bh
dGhDYWxsOjpTbG93UGF0aENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsOjprZXkpOgorICAgICAgICAq
IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpT
bG93UGF0aENhbGxLZXk6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXku
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpTbG93UGF0aENh
bGxLZXkpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6dXNlZFJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpjYWxsVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6Om9mZnNldCk6CisgICAgICAgIChKU0M6
OkZUTDo6U2xvd1BhdGhDYWxsS2V5Ojppc0VtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6
OlNsb3dQYXRoQ2FsbEtleTo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OlNs
b3dQYXRoQ2FsbEtleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhD
YWxsS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoOjplcXVhbCk6Cisg
ICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tN
YXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKToKKyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmg6
CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmdldFNsb3dQ
YXRoQ2FsbFRodW5rKToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHMpOgorICAgICAgICAqIGppdC9HUFJJbmZv
Lmg6CisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2FyYmFnZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUQnlJZEdl
bmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oOgorICAgICAgICAoSlNDOjpKSVRCeUlkR2VuZXJhdG9yOjpzbG93UGF0aEJlZ2luKToKKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFsbEdQUnMpOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6YWxsRlBScyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjphbGxSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZHVtcCk6CisgICAgICAgICogaml0L1Jl
Z2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpleGNsdWRlKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51bWJlck9mU2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXJTZXQ6OlJlZ2lzdGVyU2V0KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6
OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojppc0RlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldEhhc2g6Omhh
c2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0xMC0yMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0Bh
cHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gVXBzdHJlYW0gSlNMb2NrIGNoYW5nZXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkwRjI0RTU1NjE3RjBCNzFDMDBB
QkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTcxN0Y3NEVE
QjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovOyB9OwogCQkwRjI1NkMzNjE2MjdCMEFE
MDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0Iw
QUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUFF
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNp
emUuY3BwICovOyB9OworCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2Fj
aGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQjExODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIzMTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CisJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzg0LDYg
KzEzOTEsMTMgQEAKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTcxN0Y3NEVEQjAwQUJC
MjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmFsdWVSZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7
IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNp
emUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5l
Q2FjaGVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElubGluZUNh
Y2hlU2l6ZS5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhD
YWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNsb3dQYXRo
Q2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2Fs
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsg
cGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3Bw
OyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7
IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MzMsNiAr
Mjc0Nyw5IEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAvKiBGVExH
ZW5lcmF0ZWRGdW5jdGlvbi5oICovLAorCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjI1RjFBODE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKKwkJCQkwRjI1RjFBOTE4MTYzNUYzMDA1
MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCiAJCQkJMEZFQTBBMjYxNzA5NjIzQjAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAogCQkJCTBGRUEwQTIyMTcw
OTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJMEZFQTBB
MDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLApAQCAtMjc1Nyw2ICsyNzc0
LDEwIEBACiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAog
CQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCiAJ
CQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJ
MEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8sCisJCQkJ
MEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAorCQkJCTBG
MjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovLAorCQkJ
CTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLywKIAkJ
CQkwRjlEMzM5ODE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCAqLywKIAkJCQkw
RjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8sCiAJCQkJMEZFQTBB
MTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKQEAgLTQzOTAsNiArNDQxMSw3
IEBACiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Nh
bGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUIyMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFB
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTA3LDYgKzQ1MjksNyBAQAogCQkJCTBG
NDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1Bh
dGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDQjE3RjRF
QTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBC
ODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTQ2NTIsNiArNDY3NSw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYw
IC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBB
NjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0
MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUI0
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hh
aW4uaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMCw2ICs0NzI0LDcgQEAKIAkJCQlCQzE4QzQyMDBF
MTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEEzMzIwMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2NjE3Mjgx
Nzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjVGMUIwMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTY4LDYgKzUxOTMsNyBAQAogCQkJCTE0N0YzOUMxMTA3
RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNF
eGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcx
Nzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTUxODEsNiArNTIwNyw3IEBACiAJCQkJMEZEOEEzMUIxN0Q1
MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNBIC8qIERl
YnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3
MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NTQ1
LDYgKzU1NzIsNyBAQAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5RkYgLyog
dWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyog
dWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0
MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmMgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2X2l0YWJfaG9sZGVyLmMgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1hdHQuYyBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1NzgxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MTgsMTQgKzgxOCwxNSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBc3NlbWJsZXJUeXBlOjpjYWNoZUZsdXNoKGNvZGUsIHNpemUpOwogICAgIH0KKworICAg
IEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIoKSkKICAgICB7CiAgICAgfQogCi0gICAgQXNzZW1ibGVyVHlwZSBt
X2Fzc2VtYmxlcjsKLSAgICAKICAgICB1aW50MzJfdCByYW5kb20oKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fcmFuZG9tU291cmNlLmdldFVpbnQzMigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTc4MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNyw3ICszNywxMSBAQCBMaW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZp
bmFsaXplCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwogICAgIAotICAgIHJldHVybiBD
b2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgQVNTRVJUKG1fZGlkQWxsb2NhdGUpOwor
ICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIHJldHVybiBDb2RlUmVmKG1fZXhl
Y3V0YWJsZU1lbW9yeSk7CisgICAgCisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIobV9jb2RlKSk7CiB9CiAKIExpbmtCdWZm
ZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKQpAQCAtMTM0LDcgKzEzOCw2IEBAIHZvaWQgTGlua0J1ZmZlcjo6
Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKIAogdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lk
KiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIEFTU0VSVCgh
bV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogI2lmIGRlZmluZWQoQVNT
RU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wK
ICAgICBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuYnVmZmVyKCkuZmx1c2hDb25zdGFudFBvb2wo
ZmFsc2UpOwpAQCAtMTU0LDYgKzE1NywxNSBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKHZv
aWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWxT
aXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogeworICAg
IGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRpYWxTaXplID4gbV9zaXplKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9kaWRBbGxvY2F0ZSA9IHRydWU7Cisg
ICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0tPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxs
b2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoIW1f
ZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5NCwyMiBAQCBwdWJsaWM6CiAgICAgICAg
IGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAgIH0KIAorICAgIExpbmtCdWZmZXIoVk0m
IHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCogY29kZSwgc2l6ZV90IHNpemUpCisgICAg
ICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQorICAgICAg
ICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFs
c2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkK
KyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9jb21wbGV0
ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGxpbmtDb2RlKDAsIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7CisgICAgfQorCiAgICAgfkxpbmtCdWZmZXIoKQogICAgIHsKICAgICB9CkBA
IC0xMTcsNiArMTMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtD
YWxsKGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxpbmso
Q2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIGxpbmso
Y2FsbCwgRnVuY3Rpb25QdHIobGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKICAg
ICB7CiAgICAgICAgIGp1bXAubV9sYWJlbCA9IGFwcGx5T2Zmc2V0KGp1bXAubV9sYWJlbCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2
aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBlbnVtIEJpdEV4dGVuc2lv
biB7IFplcm9FeHRlbmQsIFNpZ25FeHRlCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludChM
VHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJpdEV4dGVuc2lvbiBleHRlbnNp
b24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5Db25zdEludCh0eXBlLCB2YWx1ZSwgZXh0
ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdFJlYWwo
TFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVybiBsbHZtLT5Db25zdFJlYWwodHlwZSwg
dmFsdWUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludFRvUHRyKExWYWx1ZSB2YWx1
ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnRUb1B0cih2YWx1ZSwgdHlwZSk7
IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChMVHlwZSB0eXBlKSB7IHJldHVybiBs
bHZtLT5Db25zdE51bGwodHlwZSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0Qml0Q2Fz
dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0Qml0Q2FzdCh2
YWx1ZSwgdHlwZSk7IH0KIAogc3RhdGljIGlubGluZSBMQmFzaWNCbG9jayBhcHBlbmRCYXNpY0Js
b2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSA9
ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Jsb2NrSW5Db250ZXh0KGNvbnRleHQsIGZ1
bmN0aW9uLCBuYW1lKTsgfQpAQCAtMjQ4LDYgKzI0OSwxNiBAQCBzdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCB9OwogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3MsIDQpOwogfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJn
MywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KQoreworICAgIExWYWx1ZSBhcmdzW10gPSB7IGFy
ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUgfTsKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxk
ZXIsIGZ1bmN0aW9uLCBhcmdzLCA1KTsKK30KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2Fs
bChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUg
YXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYp
Cit7CisgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwg
YXJnNiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDYp
OworfQogZW51bSBUYWlsQ2FsbE1vZGUgeyBJc05vdFRhaWxDYWxsLCBJc1RhaWxDYWxsIH07CiBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0VGFpbENhbGwoTFZhbHVlIGNhbGwsIFRhaWxDYWxsTW9kZSBt
b2RlKSB7IGxsdm0tPlNldFRhaWxDYWxsKGNhbGwsIG1vZGUgPT0gSXNUYWlsQ2FsbCk7IH0KIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RW
YWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsMTAgKzk0LDEzIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgY2FzZSBHZXRDbG9z
dXJlVmFyOgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKLSAgICBjYXNlIEdldEJ5SWQ6CiAgICAg
Y2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBp
ZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpCiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRh
dGFWaWV3LmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVk
ZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkpJVFN0
dWJzLmgiCkBAIC0xMTAsNiArMTExLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXApCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBTdGFja01hcHMgc3RhY2ttYXBzID0gaml0
Q29kZS0+c3RhY2ttYXBzOwogCiAgICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dlbmVy
YXRvcihzdGF0ZSk7CiAgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKQEAgLTEz
Niw2ICsxMzgsODIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyID0gbGlua0J1ZmZl
ci5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2NyaXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5n
ZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7
CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNv
cmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBVTlVT
RURfUEFSQU0ocmVjb3JkKTsgLy8gRklYTUU6IHVzZSBBbnlSZWdzLgorCisgICAgICAgICAgICAv
LyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuCisg
ICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJl
Z2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1lUmVn
aXN0ZXIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgICAgICAgICBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBnZXRCeUlkLmNvZGVP
cmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCisgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVzdWx0KSwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbigKKyAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhK
SVQsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgIGNh
bGxGcmFtZVJlZ2lzdGVyLCBnZW4uc3R1YkluZm8oKSwgYmFzZSwgZ2V0QnlJZC51aWQoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNh
bGwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBnZXRCeUlkLm1fc2xvd1BhdGhEb25lID0g
c2xvd1BhdGhKSVQuanVtcCgpOworICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvciA9IGdl
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXIgPSBhZG9wdFB0cigKKyAgICAgICAgICAgIG5ldyBMaW5rQnVmZmVyKHZtLCAm
c2xvd1BhdGhKSVQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdl
dEJ5SWRzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZE1h
cDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsK
KyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAg
ICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7CisKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBmYXN0
UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9y
LmdlbmVyYXRlRmFzdFBhdGgoZmFzdFBhdGhKSVQpOworCisgICAgICAgICAgICBjaGFyKiBzdGFy
dE9mSUMgPQorICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAgICAgc2l6ZV90IHNp
emVPZklDID0gc2l6ZU9mR2V0QnlJZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIodm0sICZmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7
CisgICAgICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBoYW5kbGUgdGhlICFpc1ZhbGlkKCkgY2Fz
ZS4gV2UganVzdCBkb24ndCBhcHBlYXIgdG8gaGF2ZSBhCisgICAgICAgICAgICAvLyByZWFzb24g
dG8gZG8gc28sIHlldC4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNW
YWxpZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRl
Q29kZUxpbmtCdWZmZXItPmxpbmsoCisgICAgICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRo
RG9uZSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgIGdldEJ5
SWQubV9nZW5lcmF0b3Iuc2xvd1BhdGhKdW1wKCksCisgICAgICAgICAgICAgICAgc3RhdGUuZmlu
YWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2YoZ2V0QnlJZC5tX2dlbmVyYXRv
ci5zbG93UGF0aEJlZ2luKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2V0QnlJZC5t
X2dlbmVyYXRvci5maW5hbGl6ZShsaW5rQnVmZmVyLCAqc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgZXhpdElu
ZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSW5saW5l
Q2FjaGVEZXNjcmlwdG9yX2gKKyNkZWZpbmUgRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUg
IkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKworY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAg
ICBJbmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBtX3Nsb3dQYXRoRG9uZTsKK307CisKK2NsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVi
bGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgR2V0QnlJZERlc2NyaXB0
b3IoKSB7IH0KKyAgICAKKyAgICBHZXRCeUlkRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBtX3N0
YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBz
dGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlT3JpZ2luOyB9CisgICAgU3RyaW5n
SW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAg
dW5zaWduZWQgbV9zdGFja21hcElEOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAg
IFN0cmluZ0ltcGwqIG1fdWlkOworCitwdWJsaWM6CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBt
X2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRp
YyBzaXplX3Qgc19zaXplT2ZHZXRCeUlkOworc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7
CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCkKK3sKKyAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQor
ICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
IGppdDsKKyAgICAKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKKyAgICAgICAg
MCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdU
NiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwKKyAgICAgICAgZmFsc2UpOworICAgIGdl
bmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgCisgICAgcmV0dXJuIHNfc2l6ZU9m
R2V0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworfQorCitzaXplX3Qgc2l6ZU9m
UHV0QnlJZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKKyAgICAgICAgcmV0dXJuIHNf
c2l6ZU9mUHV0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAg
SklUUHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisgICAgICAgIDAsIENvZGVPcmlnaW4oKSwg
UmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhH
UFJJbmZvOjpyZWdUNyksCisgICAgICAgIEdQUkluZm86OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0
TW9kZSwgTm90RGlyZWN0KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOwor
ICAgIAorICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNp
emUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElu
bGluZUNhY2hlU2l6ZV9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzaXplX3Qg
c2l6ZU9mR2V0QnlJZCgpOworc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExJbmxpbmVDYWNoZVNpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU3ODE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0
IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGlu
dDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53
aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50
MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93
NjQsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlw
ZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAorICAgIG1hY3Jv
KHdlYmtpdFBhdGNocG9pbnRJbnQ2NCwgImxsdm0ud2Via2l0LnBhdGNocG9pbnQuaTY0IiwgZnVu
Y3Rpb25UeXBlKGludDY0LCBpbnQzMiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwK
ICAgICBtYWNybyh3ZWJraXRTdGFja21hcCwgImxsdm0ud2Via2l0LnN0YWNrbWFwIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1hY3JvKHRy
YXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAgbWFjcm8ob3Ny
RXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwg
aW50MzIsIFZhcmlhZGljKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
MjQgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAgICAg
ICAgICgiRlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklU
VHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7
CiAgICAgfSAvLyBlbHNlIHRoaXMgZnVuY3Rpb24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhp
dCB0aHVua3MuCiAgICAgCisgICAgaWYgKHNpZGVDb2RlTGlua0J1ZmZlcikgeworICAgICAgICAv
LyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNpYWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91
cnNlbHZlcywgbGlrZSBmb3IgaW5saW5lCisgICAgICAgIC8vIGNhY2hlcy4KKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNsb3dQYXRoQ2FsbHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBTbG93UGF0aENhbGwmIGNhbGwgPSBzbG93UGF0aENhbGxzW2ldOworICAgICAg
ICAgICAgc2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAorICAgICAgICAgICAgICAgIGNhbGwuY2Fs
bCgpLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKG1fcGxhbi52bS5mdGxUaHVu
a3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKG1fcGxhbi52bSwgY2FsbC5rZXkoKSkuY29kZSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTEla
RV9ERkdfQ09ERSgKKyAgICAgICAgICAgICpzaWRlQ29kZUxpbmtCdWZmZXIsCisgICAgICAgICAg
ICAoIkZUTCBzaWRlIGNvZGUgZm9yICVzIiwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklU
KSkuZGF0YSgpKSkKKyAgICAgICAgICAgIC5leGVjdXRhYmxlTWVtb3J5KCkpOworICAgIH0KKyAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CiAgICAgaWYgKGFy
aXR5Q2hlY2suaXNTZXQoKSkKICAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBlbnRyeXBvaW50TGlu
a0J1ZmZlci0+bG9jYXRpb25PZihhcml0eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIK
KyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCkBAIC01MCw2
ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIE93blB0cjxMaW5rQnVmZmVyPiBleGl0VGh1bmtzTGlu
a0J1ZmZlcjsKICAgICBPd25QdHI8TGlua0J1ZmZlcj4gZW50cnlwb2ludExpbmtCdWZmZXI7Cisg
ICAgT3duUHRyPExpbmtCdWZmZXI+IHNpZGVDb2RlTGlua0J1ZmZlcjsKKyAgICBWZWN0b3I8U2xv
d1BhdGhDYWxsPiBzbG93UGF0aENhbGxzOyAvLyBDYWxscyBpbnNpZGUgdGhlIHNpZGUgY29kZS4K
ICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgYXJpdHlDaGVjazsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlv
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZp
c2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCwxMiBAQCB2b2lkIExvY2F0aW9uOjpyZXN0
b3JlSW50byhNYWNyb0Fzc2VtYmxlCiAjZXJyb3IgIkNQVSBhcmNoaXRlY3R1cmUgbm90IHN1cHBv
cnRlZC4iCiAjZW5kaWYgLy8gQ1BVIGNhc2VzIGZvciBMb2NhdGlvbiBtZXRob2RzCiAKK0dQUlJl
ZyBMb2NhdGlvbjo6ZGlyZWN0R1BSKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWFkZGVuZCgpKTsK
KyAgICByZXR1cm4gZ3ByKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogbmFt
ZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5o
CShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0dQUigpIGNvbnN0OwogICAgIGJvb2wgaW52b2x2ZXNHUFIoKSBjb25zdDsKICAgICBHUFJS
ZWcgZ3ByKCkgY29uc3Q7CisgICAgR1BSUmVnIGRpcmVjdEdQUigpIGNvbnN0OyAvLyBHZXQgdGhl
IEdQUiBhbmQgYXNzZXJ0IHRoYXQgdGhlcmUgaXMgbm8gYWRkZW5kLgogICAgIAogICAgIGJvb2wg
aXNGUFIoKSBjb25zdDsKICAgICBGUFJSZWcgZnByKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU3
ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRl
ICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgog
I2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIK
ICNpbmNsdWRlICJGVExUaHVua3MuaCIKQEAgLTEyMjIsMjIgKzEyMjMsMjkgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBi
YXNlID0gMDsKKyAgICAgICAgLy8gVW50eXBlZFVzZSBpcyBhIGJpdCBoYXJkZXIgdG8gcmVhc29u
IGFib3V0IGFuZCBJJ20gbm90IHN1cmUgaG93IGJlc3QgdG8gZG8gaXQsIHlldC4KKyAgICAgICAg
Ly8gQmFzaWNhbGx5IHdlIG5lZWQgdG8gZW1pdCBhIGNlbGwgYnJhbmNoIHRoYXQgdGFrZXMgeW91
IHRvIHRoZSBzbG93IHBhdGgsIGJ1dCB0aGUgc2xvdworICAgICAgICAvLyBwYXRoIGlzIGdlbmVy
YXRlZCBieSB0aGUgSUMgZ2VuZXJhdG9yIHNvIHdlIGNhbid0IGp1bXAgdG8gaXQgZnJvbSBoZXJl
LiBBbmQgdGhlIElDCisgICAgICAgIC8vIGdlbmVyYXRvciBjdXJyZW50bHkgZG9lc24ndCBrbm93
IGhvdyB0byBlbWl0IHN1Y2ggYSBicmFuY2guIFNvLCBmb3Igbm93LCB3ZSBqdXN0CisgICAgICAg
IC8vIHJlc3RyaWN0IHRoaXMgdG8gQ2VsbFVzZS4KKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOwogCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBDZWxsVXNlOgotICAgICAgICAgICAg
YmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgYmFzZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldOworCisgICAgICAgIGlmICghT3B0aW9uczo6ZnRsSUNVc2VzUGF0Y2hw
b2ludCgpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uR2V0QnlJZCksIG1fY2FsbEZyYW1lLCBtX291dC5pbnRQdHJaZXJvLCBiYXNlLCBt
X291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KworICAgICAgICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdz
Li4uCisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0LndlYmtpdFBhdGNo
cG9pbnRJbnQ2NEludHJpbnNpYygpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFj
a21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAorICAgICAgICAgICAg
Y29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwg
YmFzZSkpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLSAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwg
bV9vdXQuaW50UHRyWmVybywgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOworICAgICAg
ICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElE
LCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVHZXRCdXR0ZXJmbHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDggQEAgcHVibGljOgogICAgIExWYWx1
ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVl
IGFyZzMpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcy
LCBhcmczKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQpIHsgcmV0dXJuIGJ1aWxkQ2Fs
bChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsgfQorICAgIExW
YWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFs
dWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KSB7IHJldHVybiBidWlsZENhbGwobV9i
dWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7IH0KKyAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZh
bHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYpIHsgcmV0dXJu
IGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBh
cmc1LCBhcmc2KTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4K
ICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFNsb3dQ
YXRoQ2FsbC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIGNv
ZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlzIGN1cnJlbnRseSBhbHdheXMgNjQt
Yml0Lgorc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6ZSA9IDg7CisgICAgICAgIAorLy8gVGhp
cyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBz
dGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3VjaC4KK2NsYXNzIENhbGxDb250ZXh0IHsKK3B1
YmxpYzoKKyAgICBDYWxsQ29udGV4dCgKKyAgICAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsCisgICAgICAgIHVuc2ln
bmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICAgICAgOiBtX3N0YXRlKHN0
YXRlKQorICAgICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQorICAgICAgICAs
IG1faml0KGppdCkKKyAgICAgICAgLCBtX251bUFyZ3MobnVtQXJncykKKyAgICAgICAgLCBtX3Jl
dHVyblJlZ2lzdGVyKHJldHVyblJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qg
Y2FyZSB0aGF0IHlvdSdyZSB1c2luZyBjYWxsZWUtc2F2ZSBvciBzdGFjayByZWdpc3RlcnMuCisg
ICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpKTsKKyAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgcmV0dXJuIHJlZ2lz
dGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KKyAgICAgICAgaWYgKG1fcmV0dXJuUmVnaXN0
ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5jbGVhciht
X3JldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzdGFja0J5dGVzTmVl
ZGVkRm9yUmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgbV9vZmZz
ZXRUb1NhdmluZ0FyZWEgPQorICAgICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAq
IHdvcmRTaXplOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtQXJndW1lbnRSZWdpc3Rl
cnNUaGF0TmVlZFNhdmluZyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWlu
KE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpKQorICAgICAgICAgICAgICAgIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtTYXZp
bmdBcmVhID0KKyAgICAgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsKKyAgICAgICAgICAg
IG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcgKiB3b3JkU2l6ZTsKKyAgICAgICAg
CisgICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CisgICAgICAgICAgICBvZmZzZXRUb1RodW5r
U2F2aW5nQXJlYSArCisgICAgICAgICAgICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVz
cyArCisgICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkg
LSBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nKSAqIHdvcmRTaXplOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHN0YWNrQWxpZ25tZW50ID0gMTY7CisgICAgICAgIAorICAgICAg
ICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9zdGFja0J5dGVzTmVlZGVkICsgc3RhY2tBbGlnbm1l
bnQgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnQgLSAxKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIG1f
dGh1bmtTYXZlU2V0ID0gbV91c2VkUmVnaXN0ZXJzOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJn
cyk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZv
Ojp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAq
IHdvcmRTaXplKSk7CisgICAgICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdB
cmVhOworICAgIH0KKyAgICAKKyAgICB+Q2FsbENvbnRleHQoKQorICAgIHsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1F
TlRfUkVHSVNURVJTLCBtX251bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fdXNl
ZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0Fy
Z3VtZW50UmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRv
U2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSksIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0
ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9Cisg
ICAgCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90aHVua1NhdmVTZXQ7CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBvZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCks
IGNhbGxUYXJnZXQsIG9mZnNldCgpKTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgbWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIHJlc3VsdCA9IG1faml0LmNhbGwoKTsKKyAgICAgICAgbV9zdGF0ZS5maW5h
bGl6ZXItPnNsb3dQYXRoQ2FsbHMuYXBwZW5kKFNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHJl
c3VsdCwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU3RhdGUmIG1fc3RhdGU7CisgICAgUmVnaXN0
ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CisgICAgdW5z
aWduZWQgbV9udW1BcmdzOworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOworICAgIHNpemVf
dCBtX29mZnNldFRvU2F2aW5nQXJlYTsKKyAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOwor
ICAgIFJlZ2lzdGVyU2V0IG1fdGh1bmtTYXZlU2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCAKKyAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIsCisgICAg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgb2JqZWN0LCBTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0
LCA0LCByZXN1bHQpOworICAgIGppdC5zZXR1cEFyZ3VtZW50cygKKyAgICAgICAgY2FsbEZyYW1l
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOworICAgIHJldHVybiBj
b250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSk7CisgICAgLy8g
RklYTUU6IEZUTCBzaG91bGQgc3VwcG9ydCBleGNlcHRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTFNsb3dQYXRoQ2FsbF9oCisjZGVmaW5lIEZUTFNsb3dQYXRoQ2Fs
bF9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgor
I2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK2NsYXNzIFN0YXRlOworCitjbGFzcyBTbG93UGF0aENhbGwgeworcHVi
bGljOgorICAgIFNsb3dQYXRoQ2FsbCgpIHsgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbChNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICAg
ICAgOiBtX2NhbGwoY2FsbCkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
OyB9CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9Cisg
ICAgCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKKyAgICBTbG93
UGF0aENhbGxLZXkgbV9rZXk7Cit9OworCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKAorICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBKX0pJ
VE9wZXJhdGlvbl9FU3NpSkksCisgICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJl
Z2lzdGVyLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZyBvYmplY3QsCisgICAgU3RyaW5nSW1w
bCogdWlkKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENhbGxfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TFNsb3dQYXRoQ2FsbEtleS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBTbG93UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwg
bV91c2VkUmVnaXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgY2FsbFRhcmdldCA9
ICIsIFJhd1BvaW50ZXIobV9jYWxsVGFyZ2V0KSwgIj4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExTbG93UGF0aENhbGxLZXlfaAorI2RlZmluZSBG
VExTbG93UGF0aENhbGxLZXlfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRo
aXMgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc29tZSBzYW5pdHkgaW4gc2xvdy1wYXRoIGNhbGxzIG91
dCBvZiB0aGUgRlRMJ3MgaW5saW5lCisvLyBjYWNoZXMuIFRoZSBpZGVhIGlzIHRoYXQgd2UgZG9u
J3Qgd2FudCBhbGwgb2YgdGhlIHJlZ2lzdGVyIHNhdmUvcmVzdG9yZSBzdHVmZiB0bworLy8gYmUg
Z2VuZXJhdGVkIGF0IGVhY2ggSUMgc2l0ZS4gSW5zdGVhZCwgdGhlIElDIHNsb3cgcGF0aCBjYWxs
IHNpdGUgd2lsbCBqdXN0IHNhdmUKKy8vIHRoZSByZWdpc3RlcnMgbmVlZGVkIGZvciB0aGUgYXJn
dW1lbnRzLiBJdCB3aWxsIGFycmFuZ2UgZm9yIHRoZXJlIHRvIGJlIGVub3VnaAorLy8gc3BhY2Ug
b24gdG9wIG9mIHN0YWNrIHRvIHNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgYW5kIHRoZSBy
ZXR1cm4gUEMuIFRoZW4gaXQKKy8vIHdpbGwgY2FsbCBhIHNoYXJlZCB0aHVuayB0aGF0IHdpbGwg
c2F2ZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4gVGhhdCB0aHVuayBuZWVkcworLy8gdG8ga25v
dyB0aGUgc3RhY2sgb2Zmc2V0IGF0IHdoaWNoIHRoaW5ncyBnZXQgc2F2ZWQgYWxvbmcgd2l0aCB0
aGUgY2FsbCB0YXJnZXQuCisKKy8vIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGlzICpub3QgaW5jbHVk
aW5nKiB0aGUgcmV0dXJuIFBDIHRoYXQgd291bGQgYmUgcHVzaGVkIG9uIFg4Ni4KKworY2xhc3Mg
U2xvd1BhdGhDYWxsS2V5IHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGxLZXkoKQorICAgICAg
ICA6IG1fY2FsbFRhcmdldCgwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCwgdm9pZCog
Y2FsbFRhcmdldCwgcHRyZGlmZl90IG9mZnNldCkKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMo
c2V0KQorICAgICAgICAsIG1fY2FsbFRhcmdldChjYWxsVGFyZ2V0KQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisgICAgdm9p
ZCogY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQorICAgIHB0cmRp
ZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7
IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9
OworICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleShFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1f
dXNlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6RW1wdHlWYWx1ZSkKKyAgICAgICAgLCBtX2NhbGxU
YXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
U2xvd1BhdGhDYWxsS2V5KERlbGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OkRlbGV0ZWRWYWx1ZSkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoMCkK
KyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Vt
cHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMuaXNFbXB0eVZhbHVlKCk7
IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0
ZXJzLmlzRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U2xvd1BhdGhDYWxsS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Vz
ZWRSZWdpc3RlcnMgPT0gb3RoZXIubV91c2VkUmVnaXN0ZXJzCisgICAgICAgICAgICAmJiBtX2Nh
bGxUYXJnZXQgPT0gb3RoZXIubV9jYWxsVGFyZ2V0CisgICAgICAgICAgICAmJiBtX29mZnNldCA9
PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIFB0ckhhc2g8dm9pZCo+
OjpoYXNoKG1fY2FsbFRhcmdldCkgKyBtX29mZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
UmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIHZvaWQqIG1fY2FsbFRhcmdldDsKKyAg
ICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgU2xvd1BhdGhDYWxsS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTbG93UGF0
aENhbGxLZXkmIGEsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IHsKKyAgICB0eXBl
ZGVmIEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxK
U0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTbG93UGF0aENhbGxLZXlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCShy
ZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFw
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDExIEBAIHZvaWQgU3RhY2tNYXBzOjpM
b2NhdGlvbjo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIigiLCBraW5kLCAiLCByZWci
LCBkd2FyZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOwogfQogCitHUFJSZWcgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6ZGlyZWN0R1BSKFN0YWNrTWFwcyYgc3RhY2ttYXBzKSBjb25zdAoreworICAg
IHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2ttYXBzLCAqdGhpcykuZGly
ZWN0R1BSKCk7Cit9CisKIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCiAg
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBzJiBzdGFja21hcHMsIGNoYXIqIHNhdmVk
UmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCw3IEBAIHN0cnVjdCBTdGFja01hcHMgewogICAgICAgICB2b2lkIHBhcnNlKERhdGFWaWV3Kiwg
dW5zaWduZWQmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKICAgICAgICAgCisgICAgICAgIEdQUlJlZyBkaXJlY3RHUFIoU3RhY2tNYXBzJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZXImLCBTdGFja01hcHMm
LCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3Q7CiAgICAgfTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1Nzgx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiRlRM
QWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiCisjaW5j
bHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5o
IgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5o
IgpAQCAtNTYsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7
CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CiAgICAgSklURmluYWxp
emVyKiBmaW5hbGl6ZXI7CisgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBn
ZXRCeUlkczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0
b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rp
b25Xb3JkPiBzdGFja21hcHNTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDY3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblcKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayBmb3Ig
Y2FsbEZyYW1lIGF0ICVzIiwgdG9DU3RyaW5nKGxvY2F0aW9uKS5kYXRhKCkpKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0s
IDApOworICAgIAorICAgIC8vIFdlIHdhbnQgdG8gc2F2ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXJzIGF0
IHRoZSBnaXZlbiBvZmZzZXQsIHRoZW4gd2Ugd2FudCB0byBzYXZlIHRoZQorICAgIC8vIG9sZCBy
ZXR1cm4gYWRkcmVzcyBzb21ld2hlcmUgcGFzdCB0aGF0IG9mZnNldCwgYW5kIHRoZW4gZmluYWxs
eSB3ZSB3YW50IHRvIG1ha2UgdGhlCisgICAgLy8gY2FsbC4KKyAgICAKKyAgICBzaXplX3QgY3Vy
cmVudE9mZnNldCA9IGtleS5vZmZzZXQoKSArIHNpemVvZih2b2lkKik7CisgICAgCisjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7
CisjZW5kaWYKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9
IE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihyZWcgKyAxKSkgeworICAgICAgICBpZiAoIWtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJl
ZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgY3VycmVudE9mZnNldCkpOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZih2b2lk
Kik7CisgICAgfQorICAgIAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBy
ZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OkZQUmVnaXN0ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVy
cygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5zdG9yZURv
dWJsZShyZWcsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNldCAr
PSBzaXplb2YoZG91YmxlKTsKKyAgICB9CisgICAgCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSk7CisgICAgCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisgICAgaml0LmxvYWRQdHIoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAg
ICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IDsgcmVnID0gc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRD4ocmVnIC0gMSkpIHsKKyAgICAg
ICAgaWYgKGtleS51c2VkUmVnaXN0ZXJzKCkuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIGN1cnJl
bnRPZmZzZXQgLT0gc2l6ZW9mKGRvdWJsZSk7CisgICAgICAgICAgICBqaXQubG9hZERvdWJsZShB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBjdXJyZW50T2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVnID09
IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1h
Y3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4ocmVnIC0gMSkpIHsKKyAgICAgICAgaWYgKGtleS51c2VkUmVn
aXN0ZXJzKCkuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgLT0gc2l6ZW9m
KHZvaWQqKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpLCBy
ZWcpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWcgPT0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBqaXQucmV0
KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxUYXJn
ZXQoKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBzbG93
IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE1NzgxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTExv
Y2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsS2V5LmgiCiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtNDMs
NiArNDQsNyBAQCBuYW1lc3BhY2UgRlRMIHsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKFZNKik7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJhdG9y
KFZNJiwgY29uc3QgTG9jYXRpb24mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JU
eXBlPgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlSWZOZWNlc3NhcnkoCkBAIC02NSw4
ICs2NywxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2bSwgbV9vc3JFeGl0VGh1bmtzLCBsb2Nh
dGlvbiwgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRvcik7CiAgICAg
fQogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0aENhbGxUaHVuayhW
TSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdlbmVyYXRlSWZOZWNlc3NhcnkoCisgICAgICAgICAgICB2bSwgbV9zbG93UGF0aENhbGxUaHVu
a3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgIH0KKyAgICAKIHByaXZh
dGU6CiAgICAgSGFzaE1hcDxMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX29zckV4
aXRUaHVua3M7CisgICAgSGFzaE1hcDxTbG93UGF0aENhbGxLZXksIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZj4gbV9zbG93UGF0aENhbGxUaHVua3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlz
aW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkwNiw2ICs5MDYsMTMgQEAgcHVibGljOgogICAgICAgICBzZXR1
cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxPihhcmcxLCBhcmcyKTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIEdQUlJlZyBhcmcz
LCBUcnVzdGVkSW1tUHRyIGFyZzQpCisgICAgeworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzR1BS
PEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihhcmcxLCBhcmcz
KTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBt
b3ZlKGFyZzQsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgfQorICAgIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRyIGFyZzEpCiAgICAgewog
ICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBDUFUoWDg2KQotI2RlZmluZSBOVU1CRVJfT0ZfQVJH
VU1FTlRfUkVHSVNURVJTIDAKKyNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyAw
dQogCiBjbGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKQEAgLTM0Miw3ICszNDIsNyBAQCBwcml2YXRl
OgogI2VuZGlmCiAKICNpZiBDUFUoWDg2XzY0KQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTIDYKKyNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA2dQogCiBj
bGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKQEAgLTQyMyw3ICs0MjMsNyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAKICNpZiBDUFUoQVJNKQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
IDQKKyNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQogCiBjbGFzcyBHUFJJ
bmZvIHsKIHB1YmxpYzoKQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNp
ZiBDUFUoQVJNNjQpCi0jZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgOAorI2Rl
ZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDh1CiAKIGNsYXNzIEdQUkluZm8gewog
cHVibGljOgpAQCAtNTkwLDcgKzU5MCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIENQVShN
SVBTKQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDQKKyNkZWZpbmUgTlVN
QkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQogCiBjbGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoK
QEAgLTY1OCw3ICs2NTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBDUFUoU0g0KQotI2Rl
ZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDQKKyNkZWZpbmUgTlVNQkVSX09GX0FS
R1VNRU5UX1JFR0lTVEVSUyA0dQogCiBjbGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDE2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJh
Z2VTdHViSW5mbygpCit7CisgICAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG5ldyBTdHJ1Y3R1cmVTdHViSW5mbygpOworICAgIHJldHVybiBzdHViSW5mbzsKK30KKwogSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygpOwor
ICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbygp
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y29kZU9yaWdpbiA9IGNvZGVP
cmlnaW47CiB9CiAKQEAgLTYzLDI5ICs2OSwzNCBAQCBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKAogI2VuZGlmCiB9CiAKLXZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3ZvaWQgSklUQnlJZEdlbmVyYXRvcjo6ZmluYWxpemUo
TGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoKQogewotICAgIENvZGVM
b2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
Y2FsbCk7CisgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBzbG93UGF0
aC5sb2NhdGlvbk9mKG1fY2FsbCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
ID0gY2FsbFJldHVybkxvY2F0aW9uOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVJbW0pLCBjYWxsUmV0dXJuTG9j
YXRpb24pOworICAgICAgICBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2Fs
bFJldHVybkxvY2F0aW9uKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zdHJ1Y3R1cmVD
aGVjaykpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZhc3RQYXRoLmxvY2F0aW9uT2Yo
bV9zdHJ1Y3R1cmVDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgbV9zdHViSW5mby0+
cGF0Y2guZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBm
YXN0UGF0aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKICNlbHNlCiAgICAgbV9zdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxv
Y2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fdGFnTG9hZE9yU3RvcmUpKTsKICAgICBtX3N0
dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlv
biwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKKyAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fbG9hZE9yU3RvcmUpKTsKICNlbmRp
ZgogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAgY2Fs
bFJldHVybkxvY2F0aW9uLCBzbG93UGF0aC5sb2NhdGlvbk9mKG1fc2xvd1BhdGhCZWdpbikpOwog
ICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9IE1hY3JvQXNzZW1ibGVyOjpk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fZG9uZSkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
IGZhc3RQYXRoLmxvY2F0aW9uT2YobV9kb25lKSk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVs
dGFDYWxsVG9TdG9yYWdlTG9hZCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlTdG9yYWdlTG9hZCkpOworICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGZh
c3RQYXRoLmxvY2F0aW9uT2YobV9wcm9wZXJ0eVN0b3JhZ2VMb2FkKSk7Cit9CisKK3ZvaWQgSklU
QnlJZEdlbmVyYXRvcjo6ZmluYWxpemUoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBm
aW5hbGl6ZShsaW5rQnVmZmVyLCBsaW5rQnVmZmVyKTsKIH0KIAogdm9pZCBKSVRCeUlkR2VuZXJh
dG9yOjpnZW5lcmF0ZUZhc3RQYXRoQ2hlY2tzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBi
dXR0ZXJmbHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDggKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsID0gY2FsbDsKICAgICB9CiAg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoQmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3Nsb3dQYXRoQmVnaW47IH0KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aEp1bXAoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNoZWNrLm1fanVtcDsgfQogCisgICAg
dm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXIm
IHNsb3dQYXRoTGlua0J1ZmZlcik7CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJik7CiAg
ICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmNwcAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxOSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMo
KQorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkKIHsKICAgICBSZWdp
c3RlclNldCByZXN1bHQ7Ci0gICAgcmVzdWx0LnNldChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgcmVzdWx0LnNldChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6c3BlY2lh
bFJlZ2lzdGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIHJlc3VsdC5tZXJn
ZShzdGFja1JlZ2lzdGVycygpKTsKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CkBAIC00Niw2ICs1Myw1MiBAQCBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6c3BlY2lh
bFJlZ2lzdGVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjplYngpOworICAgIHJl
c3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJz
OjpyMTApOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTIpOworICAgIHJlc3VsdC5z
ZXQoWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTQp
OworICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTUpOworI2Vsc2UKKyNlcnJvciAiVW5z
dXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0IgorI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKQoreworICAgIFJlZ2lzdGVyU2V0
IHJlc3VsdDsKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihy
ZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkKK3sKKyAgICBSZWdpc3RlclNl
dCByZXN1bHQ7CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZyA9IE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjps
YXN0RlBSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RlBSZWdp
c3RlcklEPihyZWcgKyAxKSkKKyAgICAgICAgcmVzdWx0LnNldChyZWcpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKQorewor
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVyZ2UoYWxsR1BScygpKTsKKyAg
ICByZXN1bHQubWVyZ2UoYWxsRlBScygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFJlZ2lzdGVyU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgbV92ZWN0
b3IuZHVtcChvdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZp
c2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDEyIEBAIGNsYXNzIFJlZ2lzdGVyU2V0IHsKIHB1
YmxpYzoKICAgICBSZWdpc3RlclNldCgpIHsgfQogICAgIAorICAgIHN0YXRpYyBSZWdpc3RlclNl
dCBzdGFja1JlZ2lzdGVycygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBzcGVjaWFsUmVnaXN0
ZXJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsR1BScygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBh
bGxGUFJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbFJlZ2lzdGVycygpOwogCiAgICAg
dm9pZCBzZXQoR1BSUmVnIHJlZywgYm9vbCB2YWx1ZSA9IHRydWUpCiAgICAgewpAQCAtNzYsMTMg
KzgxLDU1IEBAIHB1YmxpYzoKICAgICBib29sIGdldChGUFJSZWcgcmVnKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5nZXQoTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgocmVnKSk7IH0KICAg
ICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5t
ZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgUmVnaXN0ZXJT
ZXQmIG90aGVyKSB7IG1fdmVjdG9yLmV4Y2x1ZGUob3RoZXIubV92ZWN0b3IpOyB9CisgICAgCisg
ICAgc2l6ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
Yml0Q291bnQoKTsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUgfTsKKyAgICBlbnVtIERl
bGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIAorICAgIFJlZ2lzdGVyU2V0KEVt
cHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0VmVjdG9yOjpFbXB0eVZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRGVsZXRlZFZhbHVlVGFnKQorICAg
ICAgICA6IG1fdmVjdG9yKEJpdFZlY3Rvcjo6RGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5pc0Vt
cHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIu
bV92ZWN0b3I7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
aGFzaCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIEJpdFZlY3RvciBtX3ZlY3RvcjsKIH07CiAK
K3N0cnVjdCBSZWdpc3RlclNldEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFJlZ2lzdGVyU2V0JiBzZXQpIHsgcmV0dXJuIHNldC5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBSZWdpc3RlclNldCYgYSwgY29uc3QgUmVnaXN0ZXJTZXQmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gZmFsc2U7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UmVnaXN0ZXJTZXQ+IHsKKyAgICB0eXBlZGVm
IEpTQzo6UmVnaXN0ZXJTZXRIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpSZWdp
c3RlclNldD4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVyU2V0PiB7IH07
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2VuZGlm
IC8vIFJlZ2lzdGVyU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBAIHR5cGVkZWYgT3B0
aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihib29sLCBmdGxUcmFwc09uT1NSRXhpdCwgZmFs
c2UpIFwKICAgICB2KGJvb2wsIGZ0bE9TUkV4aXRPbWl0c01hcnNoYWxsaW5nLCBmYWxzZSkgXAog
ICAgIHYoYm9vbCwgZnRsT1NSRXhpdFVzZXNTdGFja21hcCwgZmFsc2UpIFwKKyAgICB2KGJvb2ws
IGZ0bElDVXNlc1BhdGNocG9pbnQsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VMTFZNT1NSRXhp
dEludHJpbnNpYywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBMTFZNSVIsIGZhbHNlKSBcCiAg
ICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXApJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNDAgQEAKKzIwMTMtMTAtMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIGJlIGFibGUgdG8gZG8gc29tZSBzaW1wbGUgaW5s
aW5lIGNhY2hlcyB1c2luZyBMTFZNIHBhdGNocG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMxNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmVlZGVkIHNvbWUgYmV0dGVy
IGJpdHZlY3RvciBzdXBwb3J0LCBsaWtlIG1lcmdpbmcgKHw9KSwgZXhjbHVkaW5nICgmPX4pLAor
ICAgICAgICBoYXNoaW5nLCBhbmQgYml0IGNvdW50aW5nLgorCisgICAgICAgICogd3RmL0JpdFZl
Y3Rvci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0U2xvdyk6CisgICAgICAgIChX
VEY6OkJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3cpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmJp
dENvdW50U2xvdyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UpOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6ZHVtcCk6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RG
OjpCaXRWZWN0b3I6Om1lcmdlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpleGNsdWRlKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpiaXRDb3VudCk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppc0VtcHR5VmFsdWUp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6Qml0VmVjdG9yOjppc0VtcHR5T3JEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpCaXRW
ZWN0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Omhhc2gpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6
OkN1c3RvbUhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6
OkN1c3RvbUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6Q3VzdG9t
SGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6OkN1c3RvbUhhc2hUcmFpdHM6
OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAo
V1RGOjpiaXRDb3VudCk6CisKIDIwMTMtMTAtMjEgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNYWtlIFRZUEVfQ0FTVFNfQkFTRSBtb3JlIGZsZXhp
YmxlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywxNCBAQCBu
YW1lc3BhY2UgV1RGIHsKIHZvaWQgQml0VmVjdG9yOjpzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYg
b3RoZXIpCiB7CiAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7Ci0gICAgaWYgKG90aGVy
LmlzSW5saW5lKCkpCisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkgfHwgb3RoZXIuaXNFbXB0eU9y
RGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNP
clBvaW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGlu
ZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbWVt
Y3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRlQ291bnQob3Ro
ZXIuc2l6ZSgpKSk7CiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwogICAgIH0KLSAgICBpZiAoIWlzSW5saW5l
KCkpCisgICAgaWYgKCFpc0lubGluZSgpICYmICFpc0VtcHR5T3JEZWxldGVkVmFsdWUoKSkKICAg
ICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIG1fYml0
c09yUG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7CiB9CkBAIC0xMjQsNyArMTI0LDU5IEBAIHZv
aWQgQml0VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAgYS0+Yml0cygp
W2ldIHw9IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNJ
bmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRzKG90aGVyLm1f
Yml0c09yUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlz
SW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsKKyAgICAgICAg
bV9iaXRzT3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAg
ICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJ
bmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9mTGluZUJpdHMoKTsK
KyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGItPm51bVdvcmRzKCkp
OyBpLS07KQorICAgICAgICBhLT5iaXRzKClbaV0gJj0gfmItPmJpdHMoKVtpXTsKK30KKworc2l6
ZV90IEJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzSW5s
aW5lKCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7
CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYml0cy0+bnVt
V29yZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0ICs9IGJpdENvdW50KGJpdHMtPmJpdHMoKVtp
XSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCaXRWZWN0b3I6OmVxdWFsc1Nsb3dD
YXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyByZWFs
bHkgY2hlZXN5LCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGQ6Om1heChzaXplKCksIG90aGVyLnNpemUoKSk7IGktLTspIHsKKyAgICAg
ICAgaWYgKGdldChpKSAhPSBvdGhlci5nZXQoaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit1aW50cHRyX3QgQml0VmVjdG9yOjpoYXNo
U2xvd0Nhc2UoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3Qg
T3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICB1aW50cHRyX3QgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQor
ICAgICAgICByZXN1bHQgXj0gYml0cy0+Yml0cygpW2ldOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBpZiAoZ2V0KGkp
KQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRl
IDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTc2
LDkgKzE3OCw2NiBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIG1fYml0c09yUG9pbnRlciB8PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAg
IEFTU0VSVChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpOworICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAg
ICAgICAgICBleGNsdWRlU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50ZXI7Cisg
ICAgICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBt
YXhJbmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgfQorICAg
IAorICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxp
bmUoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5lQml0cyhtX2Jp
dHNPclBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgZW51
bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFn
IHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgQml0VmVjdG9yKEVtcHR5VmFsdWVUYWcpCisg
ICAgICAgIDogbV9iaXRzT3JQb2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRW
ZWN0b3IoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigxKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAh
bV9iaXRzT3JQb2ludGVyOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0c09yUG9pbnRlciA9PSAxOyB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5T3JEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPD0gMTsgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzSW5saW5lKCkgJiYgb3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgICAg
IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPT0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAg
ICByZXR1cm4gZXF1YWxzU2xvd0Nhc2Uob3RoZXIpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBo
YXNoLiBKdXN0IHhvciB0b2dldGhlciB0aGUgd29yZHMgdGhhdCBob2xkIHRoZSB2YXJpb3VzCisg
ICAgICAgIC8vIGJpdHMgYW5kIHRoZW4gY29tcHV0ZSB0aGUgaGFzaC4gVGhpcyBtYWtlcyBpdCB2
ZXJ5IGVhc3kgdG8gZGVhbCB3aXRoIGJpdHZlY3RvcnMKKyAgICAgICAgLy8gdGhhdCBoYXZlIGEg
bG90IG9mIHRyYWlsaW5nIHplcm8ncy4KKyAgICAgICAgdWludHB0cl90IHZhbHVlOworICAgICAg
ICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHZhbHVlID0gY2xlYW5zZUlubGluZUJpdHMo
bV9iaXRzT3JQb2ludGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUgPSBoYXNo
U2xvd0Nhc2UoKTsKKyAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaCh2YWx1
ZSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9p
bnRlcigpCkBAIC0yMDcsNiArMjY2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBiaXRz
ICYgfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBzaXplX3QgYml0Q291bnQodWludHB0cl90IGJpdHMpCisgICAg
eworICAgICAgICBpZiAoc2l6ZW9mKHVpbnRwdHJfdCkgPT0gNCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVpbnQ2NF90
PihiaXRzKSk7CisgICAgfQorICAgIAogICAgIGNsYXNzIE91dE9mTGluZUJpdHMgewogICAgIHB1
YmxpYzoKICAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7
IH0KQEAgLTIzNiw2ICszMDMsMTIgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVy
KTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENvdW50U2xvdygpIGNv
bnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1Nsb3dDYXNlKGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB1aW50
cHRyX3QgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAgICAgCiAgICAgdWludHB0cl90KiBiaXRzKCkK
ICAgICB7CkBAIC0yNTQsNiArMzI3LDIwIEBAIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fYml0
c09yUG9pbnRlcjsKIH07CiAKK3N0cnVjdCBCaXRWZWN0b3JIYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBCaXRWZWN0b3ImIHZlY3RvcikgeyByZXR1cm4gdmVjdG9yLmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEJpdFZlY3RvciYgYSwgY29uc3QgQml0
VmVjdG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
Qml0VmVjdG9yPiB7CisgICAgdHlwZWRlZiBCaXRWZWN0b3JIYXNoIEhhc2g7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8Qml0VmVjdG9yPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEJpdFZlY3Rvcj4g
eyB9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpCaXRWZWN0b3I7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNo
VHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMzQgQEAgc3RydWN0IE51bGxh
YmxlSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVAogICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KDEpOyB9CiB9OwogCisvLyBVc2VmdWwgZm9yIGNs
YXNzZXMgdGhhdCB3YW50IGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB3aGF0IGlzIGVtcHR5IGFuZCB3
aGF0IGlzIGRlbGV0ZWQsCisvLyBhbmQgaG93IHRvIGNvbnN0cnVjdCBib3RoLgordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBDdXN0b21IYXNoVHJhaXRzIDogcHVibGljIEdlbmVyaWNIYXNo
VHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVl
OworICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KQor
ICAgIHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgVChUOjpEZWxldGVkVmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0RlbGV0ZWRWYWx1ZSgpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBU
KFQ6OkVtcHR5VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFs
dWUoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNFbXB0eVZh
bHVlKCk7CisgICAgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFz
aFRyYWl0czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1
NywxMSBAQCBpbmxpbmUgc2l6ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiAgICAgcmV0dXJu
ICgoKGJpdHMgKyAoYml0cyA+PiA0KSkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+PiAyNDsK
IH0KIAoraW5saW5lIHNpemVfdCBiaXRDb3VudCh1aW50NjRfdCBiaXRzKQoreworICAgIHJldHVy
biBiaXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cykpICsgYml0Q291bnQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJpdHMgPj4gMzIpKTsKK30KKwogLy8gTWFjcm8gdGhhdCByZXR1cm5z
IGEgY29tcGlsZSB0aW1lIGNvbnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0
IGdpdmVzIGFuIGVycm9yIGlmIHBhc3NlZCBhIG5vbi1hcnJheS4KIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBTaXplPiBjaGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVtT
aXplXSkpW1NpemVdOwogLy8gR0NDIG5lZWRzIHNvbWUgaGVscCB0byBkZWR1Y2UgYSAwIGxlbmd0
aCBhcnJheS4K
</data>
<flag name="review"
          id="237498"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="237506"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214916</attachid>
            <date>2013-10-22 18:10:24 -0700</date>
            <delta_ts>2013-10-22 18:54:33 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84594</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5n
IExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgSGFobmVuYmVyZy4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBHZXRCeUlkIGlubGluZSBjYWNoZXMg
aW4gdGhlIEZUTCB1c2luZyBsbHZtLndlYmtpdC5wYXRjaHBvaW50LgorICAgICAgICAKKyAgICAg
ICAgVGhlIGlkZWEgaXMgdGhhdCB3ZSBhc2sgTExWTSBmb3IgYSBub3Agc2xpZGUgdGhlIHNpemUg
b2YgYSBHZXRCeUlkIGlubGluZQorICAgICAgICBjYWNoZSBhbiB0aGVuIGZpbGwgaW4gdGhlIGNv
ZGUgYWZ0ZXIgTExWTSBjb21waWxhdGlvbiBpcyBjb21wbGV0ZS4gRm9yIG5vdywgd2UKKyAgICAg
ICAganVzdCB1c2UgdGhlIHN5c3RlbSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBhcmd1bWVu
dHMgYW5kIHJldHVybi4gV2UgYWxzbworICAgICAgICBzdGlsbCBtYWtlIHNvbWUgYXNzdW1wdGlv
bnMgYWJvdXQgcmVnaXN0ZXJzIHRoYXQgYXJlbid0IGNvcnJlY3QuIEJ1dCwgbW9zdCBvZgorICAg
ICAgICB0aGUgc2NhZmZvbGRpbmcgaXMgdGhlcmUgYW5kIHRoaXMgd2lsbCBzdWNjZXNzZnVsbHkg
cGF0Y2ggYW4gaW5saW5lIGNhY2hlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KToKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjphbGxvY2F0ZSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6TGlua0J1ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6
OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExBYmJyZXZpYXRpb25zLmg6CisgICAgICAgIChKU0M6
OkZUTDo6Y29uc3ROdWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZENhbGwpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMpOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNo
ZURlc2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SW5saW5lQ2FjaGVEZXNj
cmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5
SWREZXNjcmlwdG9yOjpHZXRCeUlkRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6R2V0
QnlJZERlc2NyaXB0b3I6OnN0YWNrbWFwSUQpOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5SWRE
ZXNjcmlwdG9yOjpjb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6RlRMOjpHZXRCeUlkRGVzY3Jp
cHRvcjo6dWlkKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6
c2l6ZU9mUHV0QnlJZCk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5oOgorICAg
ICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246
OmRpcmVjdEdQUik6CisgICAgICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAgICogZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQ
YXRoQ2FsbDo6U2xvd1BhdGhDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGw6
OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbDo6a2V5KToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6
U2xvd1BhdGhDYWxsS2V5OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6U2xvd1BhdGhD
YWxsS2V5KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OnVzZWRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFRhcmdldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpvZmZzZXQpOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpTbG93UGF0aENhbGxLZXk6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
bG93UGF0aENhbGxLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRo
Q2FsbEtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaDo6ZXF1YWwpOgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNr
TWFwczo6TG9jYXRpb246OmRpcmVjdEdQUik6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5o
OgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRTbG93
UGF0aENhbGxUaHVuayk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAo
SlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzKToKKyAgICAgICAgKiBqaXQvR1BSSW5m
by5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OmdhcmJhZ2VTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRH
ZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhCZWdpbik6Cisg
ICAgICAgICogaml0L1JlZ2lzdGVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjphbGxHUFJzKToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OmFsbEZQUnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6YWxsUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmR1bXApOgorICAgICAgICAqIGppdC9S
ZWdpc3RlclNldC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZXhjbHVkZSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpudW1iZXJPZlNldFJlZ2lzdGVycyk6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyU2V0OjpSZWdpc3RlclNldCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
Ojppc0VtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6aXNEZWxldGVkVmFs
dWUpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyU2V0OjpoYXNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXRIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXRIYXNoOjplcXVhbCk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisKIDIwMTMtMTAtMjIgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFVwc3RyZWFtIEpTTG9jayBjaGFuZ2VzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAkJMEYyNEU1NTYxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU3MTdGNzRF
REIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3QjBB
RDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdC
MEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFB
RTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBNzE4MTYzNUYzMDA1
MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVT
aXplLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjAxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNh
Y2hlU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNUYxQTkxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjVGMUIxMTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbC5jcHAgKi87IH07CisJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExT
bG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1RjFCMzE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExTbG93UGF0aENhbGxLZXkuY3BwICovOyB9OworCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTM4NCw2
ICsxMzkxLDEzIEBACiAJCTBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJh
bWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1l
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU3MTdGNzRFREIwMEFC
QjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZhbHVlUmVjb3ZlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElubGluZUNhY2hlRGVzY3JpcHRvci5o
OyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTElubGluZUNh
Y2hlU2l6ZS5jcHA7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQTkxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGlu
ZUNhY2hlU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExJbmxpbmVD
YWNoZVNpemUuaDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0
aENhbGwuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsLmg7
IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2xvd1BhdGhDYWxsS2V5LmNw
cDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbEtleS5o
OyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QUExN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzMzLDYg
KzI3NDcsOSBAQAogCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRy
eUpJVENvZGUuY3BwICovLAogCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JP
U1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyogRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKKwkJCQkwRjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi8sCisJCQkJMEYyNUYxQTgxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgKi8sCisJCQkJMEYyNUYxQTkxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0Iw
MEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3
MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLAogCQkJCTBGRUEw
QTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLywKQEAgLTI3NTcsNiArMjc3
NCwxMCBAQAogCQkJCTBGRUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAqLywK
IAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovLAog
CQkJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovLAorCQkJ
CTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwICovLAorCQkJ
CTBGMjVGMUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLywKKwkJCQkw
RjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAqLywKKwkJ
CQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi8sCiAJ
CQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCiAJCQkJ
MEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBGRUEw
QTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCkBAIC00MzkwLDYgKzQ0MTEs
NyBAQAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxOTBFMTZGNUNEMDBCMzQ0NjAgLyogSlND
YWxsYmFja0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFCMjE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
QTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQxQjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDYWxsYmFja09iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MUMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDUwNyw2ICs0NTI5LDcgQEAKIAkJCQkw
RjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQ
YXRocy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNUYxQUUxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TElubGluZUNhY2hlRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC00NjUyLDYgKzQ2NzUsNyBAQAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYw
QTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0Ux
NDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFC
NDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNo
YWluLmggaW4gSGVhZGVycyAqLywKQEAgLTQ3MDAsNiArNDcyNCw3IEBACiAJCQkJQkMxOEM0MjAw
RTE2RjVDRDAwQjM0NDYwIC8qIFZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjYxNzI4
MTc3NEUwMzUwMDQ5NUIwMCAvKiBWTVN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtNTE2OCw2ICs1MTkzLDcgQEAKIAkJCQkxNDdGMzlDMTEw
N0VDMzc2MDA0MjdBNDggLyogQ29tbW9uSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTcwOUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhz
RXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3
MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTgxLDYgKzUyMDcsNyBAQAogCQkJCTBGRDhBMzFCMTdE
NTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVn
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQzQSAvKiBE
ZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERG
NzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTU0
NSw2ICs1NTcyLDcgQEAKIAkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEExNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZGIC8q
IHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLAorCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NDMxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNDI3NEQxNThFQkZFNjAwNENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hvbGRlci5jIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNDI3NDUxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4tYXR0LmMg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTc4MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtODE4LDE0ICs4MTgsMTUgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQXNzZW1ibGVyVHlwZTo6Y2FjaGVGbHVzaChjb2RlLCBzaXplKTsKICAgICB9CisKKyAg
ICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOworICAgIAogcHJvdGVjdGVkOgogICAgIEFic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIoKQogICAgICAgICA6IG1fcmFuZG9tU291cmNlKGNyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyKCkpCiAgICAgewogICAgIH0KIAotICAgIEFzc2VtYmxlclR5cGUg
bV9hc3NlbWJsZXI7Ci0gICAgCiAgICAgdWludDMyX3QgcmFuZG9tKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3JhbmRvbVNvdXJjZS5nZXRVaW50MzIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMTU3ODE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzcsNyArMzcsMTEgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpm
aW5hbGl6ZQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKICAgICAKLSAgICByZXR1cm4g
Q29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOworICAgIEFTU0VSVChtX2RpZEFsbG9jYXRlKTsK
KyAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICByZXR1cm4gQ29kZVJlZihtX2V4
ZWN1dGFibGVNZW1vcnkpOworICAgIAorICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKG1fY29kZSkpOwogfQogCiBMaW5rQnVm
ZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseShjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikKQEAgLTEzNCw3ICsxMzgsNiBAQCB2b2lkIExpbmtCdWZmZXI6
OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAKIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUodm9p
ZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBBU1NFUlQo
IW1fY29kZSk7CiAjaWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICNpZiBkZWZpbmVkKEFT
U0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09M
CiAgICAgbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29s
KGZhbHNlKTsKQEAgLTE1NCw2ICsxNTcsMTUgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2
b2lkKiBvd25lclVJRAogCiB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKHNpemVfdCBpbml0aWFs
U2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAg
ICBpZiAobV9jb2RlKSB7CisgICAgICAgIGlmIChpbml0aWFsU2l6ZSA+IG1fc2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fZGlkQWxsb2NhdGUgPSB0cnVlOwor
ICAgICAgICBtX3NpemUgPSBpbml0aWFsU2l6ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFs
bG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CiAgICAgaWYgKCFt
X2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNiArOTQsMjIgQEAgcHVibGljOgogICAgICAg
ICBsaW5rQ29kZShvd25lclVJRCwgZWZmb3J0KTsKICAgICB9CiAKKyAgICBMaW5rQnVmZmVyKFZN
JiB2bSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQorICAg
ICAgICA6IG1fc2l6ZShzaXplKQorI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKKyAgICAg
ICAgLCBtX2luaXRpYWxTaXplKDApCisjZW5kaWYKKyAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZh
bHNlKQorICAgICAgICAsIG1fY29kZShjb2RlKQorICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20p
CisgICAgICAgICwgbV92bSgmdm0pCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fY29tcGxl
dGVkKGZhbHNlKQorI2VuZGlmCisgICAgeworICAgICAgICBsaW5rQ29kZSgwLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgIH0KKwogICAgIH5MaW5rQnVmZmVyKCkKICAgICB7CiAgICAgfQpA
QCAtMTE3LDYgKzEzMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5r
Q2FsbChjb2RlKCksIGNhbGwsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBsaW5r
KENhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBsaW5r
KGNhbGwsIEZ1bmN0aW9uUHRyKGxhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBsaW5rKEp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwpCiAg
ICAgewogICAgICAgICBqdW1wLm1fbGFiZWwgPSBhcHBseU9mZnNldChqdW1wLm1fbGFiZWwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHJl
dmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgZW51bSBCaXRFeHRlbnNp
b24geyBaZXJvRXh0ZW5kLCBTaWduRXh0ZQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RJbnQo
TFR5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlLCBCaXRFeHRlbnNpb24gZXh0ZW5z
aW9uID0gWmVyb0V4dGVuZCkgeyByZXR1cm4gbGx2bS0+Q29uc3RJbnQodHlwZSwgdmFsdWUsIGV4
dGVuc2lvbiA9PSBTaWduRXh0ZW5kKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RSZWFs
KExUeXBlIHR5cGUsIGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gbGx2bS0+Q29uc3RSZWFsKHR5cGUs
IHZhbHVlKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RJbnRUb1B0cihMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0SW50VG9QdHIodmFsdWUsIHR5cGUp
OyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdE51bGwoTFR5cGUgdHlwZSkgeyByZXR1cm4g
bGx2bS0+Q29uc3ROdWxsKHR5cGUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEJpdENh
c3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdEJpdENhc3Qo
dmFsdWUsIHR5cGUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgYXBwZW5kQmFzaWNC
bG9jayhMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUg
PSAiIikgeyByZXR1cm4gbGx2bS0+QXBwZW5kQmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBm
dW5jdGlvbiwgbmFtZSk7IH0KQEAgLTI0OCw2ICsyNDksMTYgQEAgc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRDYWxsKExCdWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQgfTsKICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBh
cmdzLCA0KTsKIH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFy
ZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkKK3sKKyAgICBMVmFsdWUgYXJnc1tdID0geyBh
cmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1IH07CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWls
ZGVyLCBmdW5jdGlvbiwgYXJncywgNSk7Cit9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENh
bGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2
KQoreworICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUs
IGFyZzYgfTsKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA2
KTsKK30KIGVudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2FsbCB9Owog
c3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2FsbE1vZGUg
bW9kZSkgeyBsbHZtLT5TZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09IElzVGFpbENhbGwpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVpbGRFeHRyYWN0
VmFsdWUoYnVpbGRlciwgYWdnVmFsLCBpbmRleCwgIiIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTc4MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDEwICs5NCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogCiAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgIGNhc2UgR2V0Q2xv
c3VyZVZhcjoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6Ci0gICAgY2FzZSBHZXRCeUlkOgogICAg
IGNhc2UgSW50NTJUb1ZhbHVlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBDYW5u
b3RDb21waWxlOwogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
aWYgKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKQogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJE
YXRhVmlldy5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkZUTEV4aXRU
aHVua0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJKSVRT
dHVicy5oIgpAQCAtMTEwLDYgKzExMSw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLmdyYXBoLm1fdm07CisgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGpp
dENvZGUtPnN0YWNrbWFwczsKIAogICAgIEV4aXRUaHVua0dlbmVyYXRvciBleGl0VGh1bmtHZW5l
cmF0b3Ioc3RhdGUpOwogICAgIGV4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmtzKCk7CkBAIC0x
MzYsNiArMTM4LDgyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZlciA9IGxpbmtCdWZm
ZXIucmVsZWFzZSgpOwogICAgIH0KIAorICAgIGlmICghc3RhdGUuZ2V0QnlJZHMuaXNFbXB0eSgp
KSB7CisgICAgICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5nZXRCeUlkcy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIEdldEJ5SWREZXNjcmlwdG9yJiBnZXRCeUlkID0gc3RhdGUu
Z2V0QnlJZHNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3Jk
TWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkp
OworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0YWNrTWFwczo6UmVj
b3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlY29yZCk7IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KKworICAgICAgICAgICAg
Ly8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJl
Z2lzdGVyID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgICAgICAgICAgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJZC5jb2Rl
T3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdCksIGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oCisgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRo
SklULCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICBj
YWxsRnJhbWVSZWdpc3RlciwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlkKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBj
YWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZSA9
IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IgPSBn
ZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNv
ZGVMaW5rQnVmZmVyID0gYWRvcHRQdHIoCisgICAgICAgICAgICBuZXcgTGlua0J1ZmZlcih2bSwg
JnNsb3dQYXRoSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2NyaXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5n
ZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7
CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNv
cmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgZmFz
dFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRv
ci5nZW5lcmF0ZUZhc3RQYXRoKGZhc3RQYXRoSklUKTsKKworICAgICAgICAgICAgY2hhciogc3Rh
cnRPZklDID0KKyAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1
bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIHNpemVfdCBz
aXplT2ZJQyA9IHNpemVPZkdldEJ5SWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMp
OworICAgICAgICAgICAgLy8gTm90ZTogd2UgY291bGQgaGFuZGxlIHRoZSAhaXNWYWxpZCgpIGNh
c2UuIFdlIGp1c3QgZG9uJ3QgYXBwZWFyIHRvIGhhdmUgYQorICAgICAgICAgICAgLy8gcmVhc29u
IHRvIGRvIHNvLCB5ZXQuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlz
VmFsaWQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lk
ZUNvZGVMaW5rQnVmZmVyLT5saW5rKAorICAgICAgICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0
aERvbmUsIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICBnZXRC
eUlkLm1fZ2VuZXJhdG9yLnNsb3dQYXRoSnVtcCgpLAorICAgICAgICAgICAgICAgIHN0YXRlLmZp
bmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGdldEJ5SWQubV9nZW5lcmF0
b3Iuc2xvd1BhdGhCZWdpbigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdldEJ5SWQu
bV9nZW5lcmF0b3IuZmluYWxpemUobGlua0J1ZmZlciwgKnN0YXRlLmZpbmFsaXplci0+c2lkZUNv
ZGVMaW5rQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJ
bmRleCA9IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvcl9oCisjZGVmaW5lIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9oCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK2NsYXNzIElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6Cisg
ICAgSW5saW5lQ2FjaGVEZXNjcmlwdG9yKCkgeyB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbV9zbG93UGF0aERvbmU7Cit9OworCitjbGFzcyBHZXRCeUlkRGVzY3JpcHRvciA6IHB1
YmxpYyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgeworcHVibGljOgorICAgIEdldEJ5SWREZXNjcmlw
dG9yKCkgeyB9CisgICAgCisgICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJ
RCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogbV9z
dGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CisgICAgICAgICwgbV91aWQodWlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
c3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU9yaWdpbjsgfQorICAgIFN0cmlu
Z0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAg
ICBTdHJpbmdJbXBsKiBtX3VpZDsKKworcHVibGljOgorICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
bV9nZW5lcmF0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdGF0
aWMgc2l6ZV90IHNfc2l6ZU9mR2V0QnlJZDsKK3N0YXRpYyBzaXplX3Qgc19zaXplT2ZQdXRCeUlk
OworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mR2V0QnlJZCkK
KyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
ciBqaXQ7CisgICAgCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisgICAgICAg
IDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVn
VDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksCisgICAgICAgIGZhbHNlKTsKKyAgICBn
ZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJldHVybiBzX3NpemVP
ZkdldEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKworc2l6ZV90IHNpemVP
ZlB1dEJ5SWQoKQoreworICAgIGlmIChzX3NpemVPZlB1dEJ5SWQpCisgICAgICAgIHJldHVybiBz
X3NpemVPZlB1dEJ5SWQ7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgaml0OworICAgIAorICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAorICAgICAgICAwLCBDb2RlT3JpZ2luKCks
IFJlZ2lzdGVyU2V0KCksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmVnVDcpLAorICAgICAgICBHUFJJbmZvOjpyZWdUOCwgZmFsc2UsIE5vdFN0cmlj
dE1vZGUsIE5vdERpcmVjdCk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsK
KyAgICAKKyAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkID0gaml0Lm1fYXNzZW1ibGVyLmNvZGVT
aXplKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNh
Y2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExJ
bmxpbmVDYWNoZVNpemVfaAorI2RlZmluZSBGVExJbmxpbmVDYWNoZVNpemVfaAorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc2l6ZV90
IHNpemVPZkdldEJ5SWQoKTsKK3NpemVfdCBzaXplT2ZQdXRCeUlkKCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMSW5saW5lQ2FjaGVTaXplX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
ICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211bC53aXRoLm92ZXJmbG93Lmk2
NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBp
bnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIu
d2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGlu
dDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxv
dzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5
cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKKyAgICBtYWNy
byh3ZWJraXRQYXRjaHBvaW50SW50NjQsICJsbHZtLndlYmtpdC5wYXRjaHBvaW50Lmk2NCIsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBc
CiAgICAgbWFjcm8od2Via2l0U3RhY2ttYXAsICJsbHZtLndlYmtpdC5zdGFja21hcCIsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyh0
cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXAogICAgIG1hY3JvKG9z
ckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGJvb2xlYW4s
IGludDMyLCBWYXJpYWRpYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0
LDI0IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgICAg
ICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJ
VFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkp
OwogICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMsIHNvIG5vIGV4
aXQgdGh1bmtzLgogICAgIAorICAgIGlmIChzaWRlQ29kZUxpbmtCdWZmZXIpIHsKKyAgICAgICAg
Ly8gU2lkZSBjb2RlIGlzIGZvciBzcGVjaWFsIHNsb3cgcGF0aHMgdGhhdCB3ZSBnZW5lcmF0ZSBv
dXJzZWx2ZXMsIGxpa2UgZm9yIGlubGluZQorICAgICAgICAvLyBjYWNoZXMuCisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzbG93UGF0aENhbGxzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgU2xvd1BhdGhDYWxsJiBjYWxsID0gc2xvd1BhdGhDYWxsc1tpXTsKKyAgICAg
ICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKKyAgICAgICAgICAgICAgICBjYWxsLmNh
bGwoKSwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3BsYW4udm0uZnRsVGh1
bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5KCkpLmNvZGUoKSkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUoRklOQUxJ
WkVfREZHX0NPREUoCisgICAgICAgICAgICAqc2lkZUNvZGVMaW5rQnVmZmVyLAorICAgICAgICAg
ICAgKCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJ
VCkpLmRhdGEoKSkpCisgICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKKyAgICB9Cisg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOwogICAgIGlmIChh
cml0eUNoZWNrLmlzU2V0KCkpCiAgICAgICAgIHdpdGhBcml0eUNoZWNrID0gZW50cnlwb2ludExp
bmtCdWZmZXItPmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgi
CisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpAQCAtNTAs
NiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBPd25QdHI8TGlua0J1ZmZlcj4gZXhpdFRodW5rc0xp
bmtCdWZmZXI7CiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGVudHJ5cG9pbnRMaW5rQnVmZmVyOwor
ICAgIE93blB0cjxMaW5rQnVmZmVyPiBzaWRlQ29kZUxpbmtCdWZmZXI7CisgICAgVmVjdG9yPFNs
b3dQYXRoQ2FsbD4gc2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUu
CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2s7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZnVuY3Rp
b247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkocmV2
aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTIgQEAgdm9pZCBMb2NhdGlvbjo6cmVz
dG9yZUludG8oTWFjcm9Bc3NlbWJsZQogI2Vycm9yICJDUFUgYXJjaGl0ZWN0dXJlIG5vdCBzdXBw
b3J0ZWQuIgogI2VuZGlmIC8vIENQVSBjYXNlcyBmb3IgTG9jYXRpb24gbWV0aG9kcwogCitHUFJS
ZWcgTG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhZGRlbmQoKSk7
CisgICAgcmV0dXJuIGdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24u
aAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNHUFIoKSBjb25zdDsKICAgICBib29sIGludm9sdmVzR1BSKCkgY29uc3Q7CiAgICAgR1BS
UmVnIGdwcigpIGNvbnN0OworICAgIEdQUlJlZyBkaXJlY3RHUFIoKSBjb25zdDsgLy8gR2V0IHRo
ZSBHUFIgYW5kIGFzc2VydCB0aGF0IHRoZXJlIGlzIG5vIGFkZGVuZC4KICAgICAKICAgICBib29s
IGlzRlBSKCkgY29uc3Q7CiAgICAgRlBSUmVnIGZwcigpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1
NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRlRMRXhpdFRodW5r
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIK
ICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCkBAIC0xMjIyLDIyICsxMjIzLDI5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCiAgICAgewotICAgICAgICBMVmFsdWUg
YmFzZSA9IDA7CisgICAgICAgIC8vIFVudHlwZWRVc2UgaXMgYSBiaXQgaGFyZGVyIHRvIHJlYXNv
biBhYm91dCBhbmQgSSdtIG5vdCBzdXJlIGhvdyBiZXN0IHRvIGRvIGl0LCB5ZXQuCisgICAgICAg
IC8vIEJhc2ljYWxseSB3ZSBuZWVkIHRvIGVtaXQgYSBjZWxsIGJyYW5jaCB0aGF0IHRha2VzIHlv
dSB0byB0aGUgc2xvdyBwYXRoLCBidXQgdGhlIHNsb3cKKyAgICAgICAgLy8gcGF0aCBpcyBnZW5l
cmF0ZWQgYnkgdGhlIElDIGdlbmVyYXRvciBzbyB3ZSBjYW4ndCBqdW1wIHRvIGl0IGZyb20gaGVy
ZS4gQW5kIHRoZSBJQworICAgICAgICAvLyBnZW5lcmF0b3IgY3VycmVudGx5IGRvZXNuJ3Qga25v
dyBob3cgdG8gZW1pdCBzdWNoIGEgYnJhbmNoLiBTbywgZm9yIG5vdywgd2UganVzdAorICAgICAg
ICAvLyByZXN0cmljdCB0aGlzIHRvIENlbGxVc2UuCisgICAgICAgIEFTU0VSVChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAgICAgICAgICAg
IGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGJhc2UgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRl
bnRpZmllck51bWJlcigpXTsKKworICAgICAgICBpZiAoIU9wdGlvbnM6OmZ0bElDVXNlc1BhdGNo
cG9pbnQoKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwgbV9vdXQuaW50UHRyWmVybywgYmFzZSwg
bV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CisKKyAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJn
cy4uLgorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC53ZWJraXRQYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAg
IGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgbV9jYWxsRnJhbWUs
IGJhc2UpKTsKICAgICAgICAgCi0gICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkKSwgbV9jYWxsRnJhbWUs
IG1fb3V0LmludFB0clplcm8sIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAg
ICAgbV9mdGxTdGF0ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3RhY2ttYXBJ
RCwgbV9ub2RlLT5jb2RlT3JpZ2luLCB1aWQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0QnV0dGVyZmx5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBAIHB1YmxpYzoKICAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1
cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9CiAgICAgTFZh
bHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1
ZSBhcmczKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJn
MiwgYXJnMyk7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENh
bGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7IH0KKyAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZh
bHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1f
YnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9CisgICAg
TFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExW
YWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwg
YXJnNSwgYXJnNik7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+
CiAgICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVuY3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExTbG93
UGF0aENhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworbmFtZXNwYWNlIHsKKworLy8gVGhpcyBj
b2RlIHJlbGllcyBvbiB1cyBiZWluZyA2NC1iaXQuIEZUTCBpcyBjdXJyZW50bHkgYWx3YXlzIDY0
LWJpdC4KK3N0YXRpYyBjb25zdCBzaXplX3Qgd29yZFNpemUgPSA4OworICAgICAgICAKKy8vIFRo
aXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkg
c3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBDYWxsQ29udGV4dCB7Citw
dWJsaWM6CisgICAgQ2FsbENvbnRleHQoCisgICAgICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAorICAgICAgICB1bnNp
Z25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKKyAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAgICAg
LCBtX2ppdChqaXQpCisgICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisgICAgICAgICwgbV9y
ZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0
IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUgb3Igc3RhY2sgcmVnaXN0ZXJzLgor
ICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSk7CisgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHJldHVybiByZWdp
c3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgICAgIGlmIChtX3JldHVyblJlZ2lz
dGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIo
bV9yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc3RhY2tCeXRlc05l
ZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIG1fb2Zm
c2V0VG9TYXZpbmdBcmVhID0KKyAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJF
Ul9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykg
KiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50UmVnaXN0
ZXJzVGhhdE5lZWRTYXZpbmcgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1p
bihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVy
KGkpKSkKKyAgICAgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5n
Kys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2
aW5nQXJlYSA9CisgICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSArCisgICAgICAgICAg
ICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nICogd29yZFNpemU7CisgICAgICAg
IAorICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQorICAgICAgICAgICAgb2Zmc2V0VG9UaHVu
a1NhdmluZ0FyZWEgKworICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJl
c3MgKworICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygp
IC0gbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZykgKiB3b3JkU2l6ZTsKKyAgICAg
ICAgCisgICAgICAgIHNpemVfdCBzdGFja0FsaWdubWVudCA9IDE2OworICAgICAgICAKKyAgICAg
ICAgbV9zdGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25t
ZW50IC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50IC0gMSk7CisgICAgICAgIAorICAgICAgICBtX2pp
dC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBt
X3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFy
Z3MpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIGkg
KiB3b3JkU2l6ZSkpOworICAgICAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXRUb1RodW5rU2F2aW5n
QXJlYTsKKyAgICB9CisgICAgCisgICAgfkNhbGxDb250ZXh0KCkKKyAgICB7CisgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VN
RU5UX1JFR0lTVEVSUywgbV9udW1BcmdzKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX3Vz
ZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5
dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfQor
ICAgIAorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3Qgb2Zm
c2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNlZFJlZ2lzdGVycygp
LCBjYWxsVGFyZ2V0LCBvZmZzZXQoKSk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQpCisgICAgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCByZXN1bHQgPSBtX2ppdC5jYWxsKCk7CisgICAgICAgIG1fc3RhdGUuZmlu
YWxpemVyLT5zbG93UGF0aENhbGxzLmFwcGVuZChTbG93UGF0aENhbGwoCisgICAgICAgICAgICBy
ZXN1bHQsIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YXRlJiBtX3N0YXRlOworICAgIFJlZ2lz
dGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBDQ2FsbEhlbHBlcnMmIG1faml0OworICAgIHVu
c2lnbmVkIG1fbnVtQXJnczsKKyAgICBHUFJSZWcgbV9yZXR1cm5SZWdpc3RlcjsKKyAgICBzaXpl
X3QgbV9vZmZzZXRUb1NhdmluZ0FyZWE7CisgICAgc2l6ZV90IG1fc3RhY2tCeXRlc05lZWRlZDsK
KyAgICBSZWdpc3RlclNldCBtX3RodW5rU2F2ZVNldDsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCisgICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyLAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIG9iamVjdCwgU3RyaW5nSW1wbCog
dWlkKQoreworICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGpp
dCwgNCwgcmVzdWx0KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHMoCisgICAgICAgIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3Qs
CisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKKyAgICByZXR1cm4g
Y29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbikpOworICAgIC8v
IEZJWE1FOiBGVEwgc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9ucy4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGVExTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExTbG93UGF0aENh
bGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgU2xvd1BhdGhDYWxsIHsKK3B1
YmxpYzoKKyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAKKyAgICBTbG93UGF0aENhbGwoTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAg
ICAgIDogbV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bDsgfQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7CisgICAgU2xv
d1BhdGhDYWxsS2V5IG1fa2V5OworfTsKKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbigKKyAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgSl9K
SVRPcGVyYXRpb25fRVNzaUpJLAorICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjYWxsRnJhbWVS
ZWdpc3RlciwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcgb2JqZWN0LAorICAgIFN0cmluZ0lt
cGwqIHVpZCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExTbG93UGF0aENhbGxLZXkuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgU2xvd1BhdGhDYWxsS2V5OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dXNlZFJlZ2lzdGVycyA9ICIs
IG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsICIsIGNhbGxUYXJnZXQg
PSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldCksICI+Iik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKyNkZWZpbmUg
RlRMU2xvd1BhdGhDYWxsS2V5X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBU
aGlzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5IGluIHNsb3ctcGF0aCBjYWxscyBv
dXQgb2YgdGhlIEZUTCdzIGlubGluZQorLy8gY2FjaGVzLiBUaGUgaWRlYSBpcyB0aGF0IHdlIGRv
bid0IHdhbnQgYWxsIG9mIHRoZSByZWdpc3RlciBzYXZlL3Jlc3RvcmUgc3R1ZmYgdG8KKy8vIGJl
IGdlbmVyYXRlZCBhdCBlYWNoIElDIHNpdGUuIEluc3RlYWQsIHRoZSBJQyBzbG93IHBhdGggY2Fs
bCBzaXRlIHdpbGwganVzdCBzYXZlCisvLyB0aGUgcmVnaXN0ZXJzIG5lZWRlZCBmb3IgdGhlIGFy
Z3VtZW50cy4gSXQgd2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0byBiZSBlbm91Z2gKKy8vIHNwYWNl
IG9uIHRvcCBvZiBzdGFjayB0byBzYXZlIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzIGFuZCB0aGUg
cmV0dXJuIFBDLiBUaGVuIGl0CisvLyB3aWxsIGNhbGwgYSBzaGFyZWQgdGh1bmsgdGhhdCB3aWxs
IHNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuIFRoYXQgdGh1bmsgbmVlZHMKKy8vIHRvIGtu
b3cgdGhlIHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGluZ3MgZ2V0IHNhdmVkIGFsb25nIHdpdGgg
dGhlIGNhbGwgdGFyZ2V0LgorCisvLyBOb3RlIHRoYXQgdGhlIG9mZnNldCBpcyAqbm90IGluY2x1
ZGluZyogdGhlIHJldHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1c2hlZCBvbiBYODYuCisKK2NsYXNz
IFNsb3dQYXRoQ2FsbEtleSB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsS2V5KCkKKyAgICAg
ICAgOiBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQsIHZvaWQq
IGNhbGxUYXJnZXQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJz
KHNldCkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkKKyAgICAgICAgLCBtX29m
ZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQorICAgIHZv
aWQqIGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcg
eyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUg
fTsKKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBt
X3VzZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCisgICAgICAgICwgbV9jYWxs
VGFyZ2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFNsb3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV91c2VkUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0OjpEZWxldGVkVmFsdWUpCisgICAgICAgICwgbV9jYWxsVGFyZ2V0KDAp
CisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmlzRW1wdHlWYWx1ZSgp
OyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lz
dGVycy5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV91
c2VkUmVnaXN0ZXJzID09IG90aGVyLm1fdXNlZFJlZ2lzdGVycworICAgICAgICAgICAgJiYgbV9j
YWxsVGFyZ2V0ID09IG90aGVyLm1fY2FsbFRhcmdldAorICAgICAgICAgICAgJiYgbV9vZmZzZXQg
PT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkgKyBQdHJIYXNoPHZvaWQq
Pjo6aGFzaChtX2NhbGxUYXJnZXQpICsgbV9vZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgorICAg
IFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICB2b2lkKiBtX2NhbGxUYXJnZXQ7Cisg
ICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFNsb3dQYXRoQ2FsbEtleUhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KSB7
IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2xvd1Bh
dGhDYWxsS2V5JiBhLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5PiB7CisgICAgdHlw
ZWRlZiBKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsS2V5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAko
cmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01h
cHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMSBAQCB2b2lkIFN0YWNrTWFwczo6
TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnByaW50KCIoIiwga2luZCwgIiwgcmVn
IiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIikiKTsKIH0KIAorR1BSUmVnIFN0YWNrTWFw
czo6TG9jYXRpb246OmRpcmVjdEdQUihTdGFja01hcHMmIHN0YWNrbWFwcykgY29uc3QKK3sKKyAg
ICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKHN0YWNrbWFwcywgKnRoaXMpLmRp
cmVjdEdQUigpOworfQorCiB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAog
ICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZl
ZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsNyBAQCBzdHJ1Y3QgU3RhY2tNYXBzIHsKICAgICAgICAgdm9pZCBwYXJzZShEYXRhVmlldyos
IHVuc2lnbmVkJiBvZmZzZXQpOwogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CiAgICAgICAgIAorICAgICAgICBHUFJSZWcgZGlyZWN0R1BSKFN0YWNrTWFwcyYpIGNv
bnN0OwogICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGVyJiwgU3RhY2tNYXBz
JiwgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0OwogICAgIH07CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNTc4
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZU
TEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMu
aCIKQEAgLTU2LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2Rl
OwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZpbmFs
aXplciogZmluYWxpemVyOworICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4g
Z2V0QnlJZHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVj
dG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0
aW9uV29yZD4gc3RhY2ttYXBzU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw2NyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XCiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsgZm9y
IGNhbGxGcmFtZSBhdCAlcyIsIHRvQ1N0cmluZyhsb2NhdGlvbikuZGF0YSgpKSk7CiB9CiAKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYgdm0sIGNv
bnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQoreworICAgIEFzc2VtYmx5SGVscGVycyBqaXQoJnZt
LCAwKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIHNhdmUgdGhlIGdpdmVuIHJlZ2lzdGVycyBh
dCB0aGUgZ2l2ZW4gb2Zmc2V0LCB0aGVuIHdlIHdhbnQgdG8gc2F2ZSB0aGUKKyAgICAvLyBvbGQg
cmV0dXJuIGFkZHJlc3Mgc29tZXdoZXJlIHBhc3QgdGhhdCBvZmZzZXQsIGFuZCB0aGVuIGZpbmFs
bHkgd2Ugd2FudCB0byBtYWtlIHRoZQorICAgIC8vIGNhbGwuCisgICAgCisgICAgc2l6ZV90IGN1
cnJlbnRPZmZzZXQgPSBrZXkub2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOworICAgIAorI2lmIENQ
VShYODYpIHx8IENQVShYODZfNjQpCisgICAgY3VycmVudE9mZnNldCArPSBzaXplb2Yodm9pZCop
OworI2VuZGlmCisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcg
PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6
Omxhc3RSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJlZ2lzdGVycygpLmdldChy
ZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2Yodm9p
ZCopOworICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQg
cmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVy
OjpGUFJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlmICgha2V5LnVzZWRSZWdpc3Rl
cnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBqaXQuc3RvcmVE
b3VibGUocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgIGN1cnJlbnRPZmZzZXQg
Kz0gc2l6ZW9mKGRvdWJsZSk7CisgICAgfQorICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSkpOworICAgIAorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIAorICAgIGppdC5sb2FkUHRyKEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGtleS5vZmZzZXQoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Cisg
ICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6RlBSZWdp
c3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyA7IHJlZyA9IHN0
YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7CisgICAg
ICAgIGlmIChrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKSB7CisgICAgICAgICAgICBjdXJy
ZW50T2Zmc2V0IC09IHNpemVvZihkb3VibGUpOworICAgICAgICAgICAgaml0LmxvYWREb3VibGUo
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZyA9
PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBN
YWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IDsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7CisgICAgICAgIGlmIChrZXkudXNlZFJl
Z2lzdGVycygpLmdldChyZWcpKSB7CisgICAgICAgICAgICBjdXJyZW50T2Zmc2V0IC09IHNpemVv
Zih2b2lkKik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSwg
cmVnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVnID09IE1hY3JvQXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaml0LnJl
dCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxsVGFy
Z2V0KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgc2xv
dyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0YSgpKSk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTc4MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTQz
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRv
cihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhD
YWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9y
VHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KApAQCAtNjUs
OCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3NyRXhpdFRodW5rcywgbG9j
YXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwogICAg
IH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmso
Vk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVy
biBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1
bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICB9CisgICAgCiBwcml2
YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9vc3JF
eGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZp
c2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MDYsNiArOTA2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMT4oYXJnMSwgYXJnMik7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBHUFJSZWcgYXJn
MywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQ
UjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMj4oYXJnMSwgYXJn
Myk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
bW92ZShhcmc0LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIH0KKyAgICAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0ciBhcmcxKQogICAgIHsK
ICAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4NikKLSNkZWZpbmUgTlVNQkVSX09GX0FS
R1VNRU5UX1JFR0lTVEVSUyAwCisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMg
MHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC0zNDIsNyArMzQyLDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4Nl82NCkKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUyA2CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNnUKIAog
Y2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC00MjMsNyArNDIzLDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAjaWYgQ1BVKEFSTSkKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyA0CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BS
SW5mbyB7CiBwdWJsaWM6CkBAIC00OTcsNyArNDk3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAj
aWYgQ1BVKEFSTTY0KQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTIDgKKyNk
ZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4dQogCiBjbGFzcyBHUFJJbmZvIHsK
IHB1YmxpYzoKQEAgLTU5MCw3ICs1OTAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBDUFUo
TUlQUykKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6
CkBAIC02NTgsNyArNjU4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFNINCkKLSNk
ZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwx
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJi
YWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBuZXcgU3RydWN0dXJlU3R1YkluZm8oKTsKKyAgICByZXR1cm4gc3R1YkluZm87Cit9CisKIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIDogbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oKTsK
KyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8o
KSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luOwogfQogCkBAIC02MywyOSArNjksMzQgQEAgSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKICNlbmRpZgogfQogCi12b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXpl
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXpl
KExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKLSAgICBDb2Rl
TG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2NhbGwpOworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0gc2xvd1Bh
dGgubG9jYXRpb25PZihtX2NhbGwpOwogICAgIG1fc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNoZWNr
SW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1tKSwgY2FsbFJldHVybkxv
Y2F0aW9uKTsKKyAgICAgICAgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0cnVjdHVyZUltbSksIGNh
bGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJl
Q2hlY2spKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9m
KG1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG1fc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwg
ZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZWxzZQogICAgIG1fc3R1Yklu
Zm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxSZXR1cm5M
b2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CiAgICAgbV9z
dHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZW5k
aWYKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgY2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2luKSk7CisgICAgICAgIGNh
bGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Nsb3dQYXRoQmVnaW4pKTsK
ICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9u
LCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fZG9uZSkpOwogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRl
bHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBm
YXN0UGF0aC5sb2NhdGlvbk9mKG1fcHJvcGVydHlTdG9yYWdlTG9hZCkpOworfQorCit2b2lkIEpJ
VEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAg
ZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CiB9CiAKIHZvaWQgSklUQnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcg
YnV0dGVyZmx5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw4ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbCA9IGNhbGw7CiAgICAgfQog
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbG93UGF0aEJlZ2luOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1Bh
dGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5tX2p1bXA7IH0KIAorICAg
IHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVy
JiBzbG93UGF0aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYpOwog
ICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJz
KCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpCiB7CiAgICAgUmVn
aXN0ZXJTZXQgcmVzdWx0OwotICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICByZXN1bHQuc2V0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNp
YWxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICByZXN1bHQubWVy
Z2Uoc3RhY2tSZWdpc3RlcnMoKSk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOwpAQCAtNDYsNiArNTMsNTIgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnNwZWNp
YWxSZWdpc3RlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6cjEwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICByZXN1bHQu
c2V0KFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0
KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNlbHNlCisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitS
ZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxsR1BScygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVz
dWx0OworICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0
ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyAr
IDEpKQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
UmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJl
c3VsdDsKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RG
UFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQ+KHJlZyArIDEpKQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpCit7CisgICAg
UmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIHJlc3VsdC5tZXJnZShhbGxHUFJzKCkpOworICAgIHJl
c3VsdC5tZXJnZShhbGxGUFJzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVn
aXN0ZXJTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBtX3ZlY3Rvci5k
dW1wKG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9u
IDE1NzgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsMTIgQEAgY2xhc3MgUmVnaXN0ZXJTZXQgewogcHVibGlj
OgogICAgIFJlZ2lzdGVyU2V0KCkgeyB9CiAgICAgCisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0
YWNrUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNwZWNpYWxSZWdpc3RlcnMo
KTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIHN0
YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEZQ
UnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsUmVnaXN0ZXJzKCk7CiAKICAgICB2b2lk
IHNldChHUFJSZWcgcmVnLCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7CkBAIC03NiwxMyArODEs
NTUgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKTsgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLm1lcmdl
KG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYg
b3RoZXIpIHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBz
aXplX3QgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRD
b3VudCgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
CisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRl
ZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVnaXN0ZXJTZXQoRW1wdHlW
YWx1ZVRhZykKKyAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVtcHR5VmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChEZWxldGVkVmFsdWVUYWcpCisgICAgICAg
IDogbV92ZWN0b3IoQml0VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHlW
YWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLmlzRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3Zl
Y3RvcjsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNo
KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgQml0VmVjdG9yIG1fdmVjdG9yOwogfTsKIAorc3Ry
dWN0IFJlZ2lzdGVyU2V0SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVn
aXN0ZXJTZXQmIHNldCkgeyByZXR1cm4gc2V0Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFJlZ2lzdGVyU2V0JiBhLCBjb25zdCBSZWdpc3RlclNldCYgYikgeyByZXR1cm4g
YSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSBmYWxzZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpSZWdpc3RlclNldD4geworICAgIHR5cGVkZWYgSlND
OjpSZWdpc3RlclNldEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlJlZ2lzdGVy
U2V0PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6UmVnaXN0ZXJTZXQ+IHsgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjZW5kaWYgLy8g
UmVnaXN0ZXJTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTU3ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgdHlwZWRlZiBPcHRpb25S
YW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxzZSkg
XAogICAgIHYoYm9vbCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcsIGZhbHNlKSBcCiAgICAg
dihib29sLCBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZnRs
SUNVc2VzUGF0Y2hwb2ludCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1PU1JFeGl0SW50
cmluc2ljLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2UpIFwKICAgICB2
KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNlKSBcCkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTU3ODE3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0MCBAQAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUg
Y2FjaGVzIHVzaW5nIExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsg
SGFobmVuYmVyZy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmVlZGVkIHNvbWUgYmV0dGVyIGJp
dHZlY3RvciBzdXBwb3J0LCBsaWtlIG1lcmdpbmcgKHw9KSwgZXhjbHVkaW5nICgmPX4pLAorICAg
ICAgICBoYXNoaW5nLCBhbmQgYml0IGNvdW50aW5nLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rv
ci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0U2xvdyk6CisgICAgICAgIChXVEY6
OkJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3cpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmJpdENv
dW50U2xvdyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2UpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6ZHVtcCk6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6Om1lcmdlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpleGNsdWRlKToKKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjpiaXRDb3VudCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppc0VtcHR5VmFsdWUpOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjppc0VtcHR5T3JEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Omhhc2gpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9ySGFz
aDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgIChXVEY6OkN1
c3RvbUhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OkN1
c3RvbUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6Q3VzdG9tSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6OkN1c3RvbUhhc2hUcmFpdHM6Omlz
RW1wdHlWYWx1ZSk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RG
OjpiaXRDb3VudCk6CisKIDIwMTMtMTAtMjEgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBNYWtlIFRZUEVfQ0FTVFNfQkFTRSBtb3JlIGZsZXhpYmxl
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9XVEYv
d3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKIHZvaWQgQml0VmVjdG9yOjpzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3Ro
ZXIpCiB7CiAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7Ci0gICAgaWYgKG90aGVyLmlz
SW5saW5lKCkpCisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkgfHwgb3RoZXIuaXNFbXB0eU9yRGVs
ZXRlZFZhbHVlKCkpCiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBv
aW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJp
dHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKICAgICAgICAgbWVtY3B5
KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRlQ291bnQob3RoZXIu
c2l6ZSgpKSk7CiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwogICAgIH0KLSAgICBpZiAoIWlzSW5saW5lKCkp
CisgICAgaWYgKCFpc0lubGluZSgpICYmICFpc0VtcHR5T3JEZWxldGVkVmFsdWUoKSkKICAgICAg
ICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIG1fYml0c09y
UG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7CiB9CkBAIC0xMjQsNyArMTI0LDU5IEBAIHZvaWQg
Qml0VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAgYS0+Yml0cygpW2ld
IHw9IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVy
KQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNJbmxp
bmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRzKG90aGVyLm1fYml0
c09yUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5s
aW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsKKyAgICAgICAgbV9i
aXRzT3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgICAg
IG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxp
bmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9mTGluZUJpdHMoKTsKKyAg
ICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGItPm51bVdvcmRzKCkpOyBp
LS07KQorICAgICAgICBhLT5iaXRzKClbaV0gJj0gfmItPmJpdHMoKVtpXTsKK30KKworc2l6ZV90
IEJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzSW5saW5l
KCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7Cisg
ICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYml0cy0+bnVtV29y
ZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0ICs9IGJpdENvdW50KGJpdHMtPmJpdHMoKVtpXSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCaXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNl
KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyByZWFsbHkg
Y2hlZXN5LCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGQ6Om1heChzaXplKCksIG90aGVyLnNpemUoKSk7IGktLTspIHsKKyAgICAgICAg
aWYgKGdldChpKSAhPSBvdGhlci5nZXQoaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit1aW50cHRyX3QgQml0VmVjdG9yOjpoYXNoU2xv
d0Nhc2UoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgY29uc3QgT3V0
T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICB1aW50cHRyX3QgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3JkcygpOyBpLS07KQorICAg
ICAgICByZXN1bHQgXj0gYml0cy0+Yml0cygpW2ldOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBpZiAoZ2V0KGkpKQpJ
bmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1NzgxNykKKysrIFNvdXJjZS9XVEYvd3RmL0Jp
dFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTc2LDkg
KzE3OCw2NiBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIG1fYml0c09yUG9pbnRlciB8PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAgIEFT
U0VSVChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpOworICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAg
ICAgICBleGNsdWRlU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAg
ICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJ
bmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUo
KSkKKyAgICAgICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5lQml0cyhtX2JpdHNP
clBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgZW51bSBF
bXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsg
RGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgQml0VmVjdG9yKEVtcHR5VmFsdWVUYWcpCisgICAg
ICAgIDogbV9iaXRzT3JQb2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0
b3IoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigxKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV9i
aXRzT3JQb2ludGVyOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0c09yUG9pbnRlciA9PSAxOyB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5T3JEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPD0gMTsgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzSW5saW5lKCkgJiYgb3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX2JpdHNPclBvaW50ZXIgPT0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBy
ZXR1cm4gZXF1YWxzU2xvd0Nhc2Uob3RoZXIpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBoYXNo
LiBKdXN0IHhvciB0b2dldGhlciB0aGUgd29yZHMgdGhhdCBob2xkIHRoZSB2YXJpb3VzCisgICAg
ICAgIC8vIGJpdHMgYW5kIHRoZW4gY29tcHV0ZSB0aGUgaGFzaC4gVGhpcyBtYWtlcyBpdCB2ZXJ5
IGVhc3kgdG8gZGVhbCB3aXRoIGJpdHZlY3RvcnMKKyAgICAgICAgLy8gdGhhdCBoYXZlIGEgbG90
IG9mIHRyYWlsaW5nIHplcm8ncy4KKyAgICAgICAgdWludHB0cl90IHZhbHVlOworICAgICAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHZhbHVlID0gY2xlYW5zZUlubGluZUJpdHMobV9i
aXRzT3JQb2ludGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUgPSBoYXNoU2xv
d0Nhc2UoKTsKKyAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaCh2YWx1ZSk7
CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRl
cigpCkBAIC0yMDcsNiArMjY2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBiaXRzICYg
fihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7CiAgICAgfQog
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgYml0Q291bnQodWludHB0cl90IGJpdHMpCisgICAgewor
ICAgICAgICBpZiAoc2l6ZW9mKHVpbnRwdHJfdCkgPT0gNCkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVpbnQ2NF90Pihi
aXRzKSk7CisgICAgfQorICAgIAogICAgIGNsYXNzIE91dE9mTGluZUJpdHMgewogICAgIHB1Ymxp
YzoKICAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0K
QEAgLTIzNiw2ICszMDMsMTIgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsK
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENvdW50U2xvdygpIGNvbnN0
OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1Nsb3dDYXNlKGNvbnN0
IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB1aW50cHRy
X3QgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAgICAgCiAgICAgdWludHB0cl90KiBiaXRzKCkKICAg
ICB7CkBAIC0yNTQsNiArMzI3LDIwIEBAIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fYml0c09y
UG9pbnRlcjsKIH07CiAKK3N0cnVjdCBCaXRWZWN0b3JIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBCaXRWZWN0b3ImIHZlY3RvcikgeyByZXR1cm4gdmVjdG9yLmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEJpdFZlY3RvciYgYSwgY29uc3QgQml0VmVj
dG9yJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8Qml0
VmVjdG9yPiB7CisgICAgdHlwZWRlZiBCaXRWZWN0b3JIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8Qml0VmVjdG9yPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEJpdFZlY3Rvcj4geyB9
OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpCaXRWZWN0b3I7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
SGFzaFRyYWl0cy5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMzQgQEAgc3RydWN0IE51bGxhYmxl
SGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVAogICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFQ+KDEpOyB9CiB9OwogCisvLyBVc2VmdWwgZm9yIGNsYXNz
ZXMgdGhhdCB3YW50IGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB3aGF0IGlzIGVtcHR5IGFuZCB3aGF0
IGlzIGRlbGV0ZWQsCisvLyBhbmQgaG93IHRvIGNvbnN0cnVjdCBib3RoLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBDdXN0b21IYXNoVHJhaXRzIDogcHVibGljIEdlbmVyaWNIYXNoVHJh
aXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KQorICAg
IHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgVChUOjpEZWxldGVkVmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0RlbGV0ZWRWYWx1ZSgpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBUKFQ6
OkVtcHR5VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUo
Y29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNFbXB0eVZhbHVl
KCk7CisgICAgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFRy
YWl0czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxNTc4MTcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nywx
MSBAQCBpbmxpbmUgc2l6ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiAgICAgcmV0dXJuICgo
KGJpdHMgKyAoYml0cyA+PiA0KSkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+PiAyNDsKIH0K
IAoraW5saW5lIHNpemVfdCBiaXRDb3VudCh1aW50NjRfdCBiaXRzKQoreworICAgIHJldHVybiBi
aXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cykpICsgYml0Q291bnQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJpdHMgPj4gMzIpKTsKK30KKwogLy8gTWFjcm8gdGhhdCByZXR1cm5zIGEg
Y29tcGlsZSB0aW1lIGNvbnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0IGdp
dmVzIGFuIGVycm9yIGlmIHBhc3NlZCBhIG5vbi1hcnJheS4KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBTaXplPiBjaGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVtTaXpl
XSkpW1NpemVdOwogLy8gR0NDIG5lZWRzIHNvbWUgaGVscCB0byBkZWR1Y2UgYSAwIGxlbmd0aCBh
cnJheS4K
</data>
<flag name="commit-queue"
          id="237538"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214918</attachid>
            <date>2013-10-22 18:54:33 -0700</date>
            <delta_ts>2013-10-22 18:54:33 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21lIHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5n
IExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgSGFobmVuYmVyZy4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBHZXRCeUlkIGlubGluZSBjYWNoZXMg
aW4gdGhlIEZUTCB1c2luZyBsbHZtLndlYmtpdC5wYXRjaHBvaW50LgorICAgICAgICAKKyAgICAg
ICAgVGhlIGlkZWEgaXMgdGhhdCB3ZSBhc2sgTExWTSBmb3IgYSBub3Agc2xpZGUgdGhlIHNpemUg
b2YgYSBHZXRCeUlkIGlubGluZQorICAgICAgICBjYWNoZSBhbiB0aGVuIGZpbGwgaW4gdGhlIGNv
ZGUgYWZ0ZXIgTExWTSBjb21waWxhdGlvbiBpcyBjb21wbGV0ZS4gRm9yIG5vdywgd2UKKyAgICAg
ICAganVzdCB1c2UgdGhlIHN5c3RlbSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBhcmd1bWVu
dHMgYW5kIHJldHVybi4gV2UgYWxzbworICAgICAgICBzdGlsbCBtYWtlIHNvbWUgYXNzdW1wdGlv
bnMgYWJvdXQgcmVnaXN0ZXJzIHRoYXQgYXJlbid0IGNvcnJlY3QuIEJ1dCwgbW9zdCBvZgorICAg
ICAgICB0aGUgc2NhZmZvbGRpbmcgaXMgdGhlcmUgYW5kIHRoaXMgd2lsbCBzdWNjZXNzZnVsbHkg
cGF0Y2ggYW4gaW5saW5lIGNhY2hlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KToKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjphbGxvY2F0ZSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6TGlua0J1ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6
OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExBYmJyZXZpYXRpb25zLmg6CisgICAgICAgIChKU0M6
OkZUTDo6Y29uc3ROdWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZENhbGwpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMpOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNo
ZURlc2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SW5saW5lQ2FjaGVEZXNj
cmlwdG9yOjpJbmxpbmVDYWNoZURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5
SWREZXNjcmlwdG9yOjpHZXRCeUlkRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6R2V0
QnlJZERlc2NyaXB0b3I6OnN0YWNrbWFwSUQpOgorICAgICAgICAoSlNDOjpGVEw6OkdldEJ5SWRE
ZXNjcmlwdG9yOjpjb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6RlRMOjpHZXRCeUlkRGVzY3Jp
cHRvcjo6dWlkKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6
c2l6ZU9mUHV0QnlJZCk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5oOgorICAg
ICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246
OmRpcmVjdEdQUik6CisgICAgICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAgICogZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQ
YXRoQ2FsbDo6U2xvd1BhdGhDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGw6
OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbDo6a2V5KToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6
U2xvd1BhdGhDYWxsS2V5OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6U2xvd1BhdGhD
YWxsS2V5KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OnVzZWRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6Y2FsbFRhcmdldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpvZmZzZXQpOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpTbG93UGF0aENhbGxLZXk6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
bG93UGF0aENhbGxLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRo
Q2FsbEtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaDo6ZXF1YWwpOgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNr
TWFwczo6TG9jYXRpb246OmRpcmVjdEdQUik6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5o
OgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRTbG93
UGF0aENhbGxUaHVuayk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAo
SlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzKToKKyAgICAgICAgKiBqaXQvR1BSSW5m
by5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OmdhcmJhZ2VTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVEJ5SWRH
ZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6SklUQnlJZEdlbmVyYXRvcjo6c2xvd1BhdGhCZWdpbik6Cisg
ICAgICAgICogaml0L1JlZ2lzdGVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjphbGxHUFJzKToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OmFsbEZQUnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6YWxsUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmR1bXApOgorICAgICAgICAqIGppdC9S
ZWdpc3RlclNldC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZXhjbHVkZSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpudW1iZXJPZlNldFJlZ2lzdGVycyk6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyU2V0OjpSZWdpc3RlclNldCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
Ojppc0VtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6aXNEZWxldGVkVmFs
dWUpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyU2V0OjpoYXNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXRIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXRIYXNoOjplcXVhbCk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisKIDIwMTMtMTAtMjIgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIE1pbm9yIFZNKiAtPiBWTSYgY2xlYW51cHMgaW4gSGFzaFRh
YmxlIGFuZCBLZXl3b3Jkcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBA
QAogCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8q
IFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNEU1NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICov
OyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMjVGMUFFMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1
RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwICovOyB9OworCQkwRjI1RjFCMDE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLzsgfTsKKwkJMEYyNUYxQjIx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYx
QUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CisJCTBG
MjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2
NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBRTE3QjZCNTQ1MDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMzg0LDYgKzEzOTEsMTMgQEAKIAkJMEYyNEU1NTQxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyNEU1NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRo
ID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxp
bmVDYWNoZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlw
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUE4MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVTaXplLmNwcDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVD
YWNoZVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBOTE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTElubGluZUNhY2hlU2l6ZS5oOyBwYXRoID0gZnRsL0ZUTElubGluZUNh
Y2hlU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1RjFBQTE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhD
YWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUIxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291
bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdD
SW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI3MzMsNiArMjc0Nyw5IEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAw
Q0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1
MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdD
MTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAorCQkJCTBGMjVG
MUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJ
CQkwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywK
KwkJCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8s
CiAJCQkJMEZFQTBBMjYxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnku
Y3BwICovLAogCQkJCTBGRUEwQTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmggKi8sCiAJCQkJMEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
Y3BwICovLApAQCAtMjc1Nyw2ICsyNzc0LDEwIEBACiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTE91dHB1dC5oICovLAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBG
VExTYXZlUmVzdG9yZS5jcHAgKi8sCiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZU
TFNhdmVSZXN0b3JlLmggKi8sCisJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbC5jcHAgKi8sCisJCQkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbC5oICovLAorCQkJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGxLZXkuY3BwICovLAorCQkJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExT
bG93UGF0aENhbGxLZXkuaCAqLywKIAkJCQkwRjlEMzM5ODE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCAqLywKIAkJCQkwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3Rh
Y2tNYXBzLmggKi8sCiAJCQkJMEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNw
cCAqLywKQEAgLTQzOTAsNiArNDQxMSw3IEBACiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdE
IC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE5
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDFBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NhbGxiYWNrRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NhbGxiYWNrT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxQzBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC00
NTA3LDYgKzQ1MjksNyBAQAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9m
ZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERB
ODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4
RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI1RjFB
RTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQ2NTIsNiArNDY3NSw3IEBACiAJCQkJ
QkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGxLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBX
ZWFrTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAx
NDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYz
MDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMCw2ICs0
NzI0LDcgQEAKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFNEEzMzIwMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2NjE3MjgxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjVGMUIwMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxp
bmVDYWNoZVNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0Uy
MzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUz
Q0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTY4LDYgKzUx
OTMsNyBAQAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29t
bW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhD
RjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVz
dWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBD
b21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxODEsNiArNTIw
Nyw3IEBACiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFu
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERh
dGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEw
N0VDMDJDMDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1
NjUwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC01NTQ1LDYgKzU1NzIsNyBAQAogCQkJCTBGMkI2NzBBMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0QTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0
Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0
LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2
X2l0YWJfaG9sZGVyLmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2X3N5bi1hdHQuYyBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsMTQgKzgxOCwx
NSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBc3NlbWJsZXJUeXBlOjpjYWNoZUZsdXNoKGNv
ZGUsIHNpemUpOwogICAgIH0KKworICAgIEFzc2VtYmxlclR5cGUgbV9hc3NlbWJsZXI7CisgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9y
YW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKICAgICB7CiAgICAg
fQogCi0gICAgQXNzZW1ibGVyVHlwZSBtX2Fzc2VtYmxlcjsKLSAgICAKICAgICB1aW50MzJfdCBy
YW5kb20oKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmFuZG9tU291cmNlLmdldFVpbnQzMigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNywxMSBAQCBMaW5rQnVmZmVy
OjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlv
bigpOwogICAgIAotICAgIHJldHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAg
QVNTRVJUKG1fZGlkQWxsb2NhdGUpOworICAgIGlmIChtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAg
ICAgIHJldHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CisgICAgCisgICAgcmV0dXJu
IENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
bV9jb2RlKSk7CiB9CiAKIExpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQpAQCAtMTM0LDcgKzEz
OCw2IEBAIHZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSgKIAogdm9pZCBM
aW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogewotICAgIEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01Q
QUNUSU9OKQogI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NF
TUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKICAgICBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuYnVm
ZmVyKCkuZmx1c2hDb25zdGFudFBvb2woZmFsc2UpOwpAQCAtMTU0LDYgKzE1NywxNSBAQCB2b2lk
IExpbmtCdWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiAKIHZvaWQgTGlua0J1ZmZlcjo6
YWxsb2NhdGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogeworICAgIGlmIChtX2NvZGUpIHsKKyAgICAgICAgaWYgKGluaXRp
YWxTaXplID4gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
bV9kaWRBbGxvY2F0ZSA9IHRydWU7CisgICAgICAgIG1fc2l6ZSA9IGluaXRpYWxTaXplOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fdm0t
PmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fdm0sIGluaXRpYWxTaXplLCBvd25lclVJ
RCwgZWZmb3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJ
KHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NCw2ICs5
NCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwogICAg
IH0KIAorICAgIExpbmtCdWZmZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgdm9pZCog
Y29kZSwgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9zaXplKHNpemUpCisjaWYgRU5BQkxFKEJS
QU5DSF9DT01QQUNUSU9OKQorICAgICAgICAsIG1faW5pdGlhbFNpemUoMCkKKyNlbmRpZgorICAg
ICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAg
ICAgICwgbV9hc3NlbWJsZXIobWFzbSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAg
IGxpbmtDb2RlKDAsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgfQorCiAgICAgfkxpbmtC
dWZmZXIoKQogICAgIHsKICAgICB9CkBAIC0xMTcsNiArMTMzLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUoKSwgY2FsbCwgZnVuY3Rpb24pOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBsYWJl
bCkKKyAgICB7CisgICAgICAgIGxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobGFiZWwuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbCBsYWJlbCkKICAgICB7CiAgICAgICAgIGp1bXAubV9sYWJlbCA9IGFwcGx5
T2Zmc2V0KGp1bXAubV9sYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsx
NDUsNyBAQCBlbnVtIEJpdEV4dGVuc2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlCiBzdGF0aWMg
aW5saW5lIExWYWx1ZSBjb25zdEludChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFs
dWUsIEJpdEV4dGVuc2lvbiBleHRlbnNpb24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5D
b25zdEludCh0eXBlLCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CiBzdGF0aWMg
aW5saW5lIExWYWx1ZSBjb25zdFJlYWwoTFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVy
biBsbHZtLT5Db25zdFJlYWwodHlwZSwgdmFsdWUpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBj
b25zdEludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29u
c3RJbnRUb1B0cih2YWx1ZSwgdHlwZSk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVs
bChMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIGNvbnN0Qml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0
dXJuIGxsdm0tPkNvbnN0Qml0Q2FzdCh2YWx1ZSwgdHlwZSk7IH0KIAogc3RhdGljIGlubGluZSBM
QmFzaWNCbG9jayBhcHBlbmRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5j
dGlvbiwgY29uc3QgY2hhciogbmFtZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Js
b2NrSW5Db250ZXh0KGNvbnRleHQsIGZ1bmN0aW9uLCBuYW1lKTsgfQpAQCAtMjQ4LDYgKzI0OSwx
NiBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZhbHVl
IGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCB9OwogICAgIHJldHVybiBidWlsZENh
bGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDQpOwogfQorc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KQorewor
ICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUgfTsKKyAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA1KTsKK30KK3N0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBM
VmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYpCit7CisgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwg
YXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGFyZ3MsIDYpOworfQogZW51bSBUYWlsQ2FsbE1vZGUgeyBJc05vdFRh
aWxDYWxsLCBJc1RhaWxDYWxsIH07CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFpbENhbGwoTFZh
bHVlIGNhbGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IGxsdm0tPlNldFRhaWxDYWxsKGNhbGwsIG1v
ZGUgPT0gSXNUYWlsQ2FsbCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZh
bHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDEzIEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldENsb3N1cmVSZWdp
c3RlcnM6CiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoK
LSAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgICAgIC8vIFRo
ZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICBpZiAoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCku
dHlwZWRBcnJheVR5cGUoKSkpCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkRhdGFWaWV3LmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVy
LmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCkBAIC0xMTAsNiArMTExLDcgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YWNrTWFwczo6UmVjb3Jk
TWFwJiByZWNvcmRNYXApCiB7CiAgICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBT
dGFja01hcHMgc3RhY2ttYXBzID0gaml0Q29kZS0+c3RhY2ttYXBzOwogCiAgICAgRXhpdFRodW5r
R2VuZXJhdG9yIGV4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSk7CiAgICAgZXhpdFRodW5rR2VuZXJh
dG9yLmVtaXRUaHVua3MoKTsKQEAgLTEzNiw2ICsxMzgsODIgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVu
a3NMaW5rQnVmZmVyID0gbGlua0J1ZmZlci5yZWxlYXNlKCk7CiAgICAgfQogCisgICAgaWYgKCFz
dGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRo
SklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmdldEJ5SWRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgR2V0QnlJZERlc2Ny
aXB0b3ImIGdldEJ5SWQgPSBzdGF0ZS5nZXRCeUlkc1tpXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRN
YXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBVTlVTRURfUEFSQU0ocmVjb3JkKTsgLy8gRklYTUU6IHVzZSBB
bnlSZWdzLgorCisgICAgICAgICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGlj
aCByZWdpc3RlcnMgYXJlIGxpdmUuCisgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJl
Z3MoYmFzZSksCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0KSwgZmFsc2UpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBz
bG93UGF0aEpJVC5sYWJlbCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICBzdGF0ZSwg
dXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0LAorICAgICAgICAgICAgICAgIGNhbGxGcmFtZVJlZ2lzdGVyLCBnZW4uc3R1YkluZm8oKSwg
YmFzZSwgZ2V0QnlJZC51aWQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBn
ZXRCeUlkLm1fc2xvd1BhdGhEb25lID0gc2xvd1BhdGhKSVQuanVtcCgpOworICAgICAgICAgICAg
Z2V0QnlJZC5tX2dlbmVyYXRvciA9IGdlbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXIgPSBhZG9wdFB0cigKKyAgICAgICAg
ICAgIG5ldyBMaW5rQnVmZmVyKHZtLCAmc2xvd1BhdGhKSVQsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBHZXRCeUlkRGVzY3Jp
cHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdldEJ5SWRzW2ldOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5k
KGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7CisKKyAgICAg
ICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAg
ICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoZmFzdFBhdGhKSVQpOwor
CisgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQorICAgICAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0
OworICAgICAgICAgICAgc2l6ZV90IHNpemVPZklDID0gc2l6ZU9mR2V0QnlJZCgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sICZmYXN0UGF0aEpJ
VCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAgICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBo
YW5kbGUgdGhlICFpc1ZhbGlkKCkgY2FzZS4gV2UganVzdCBkb24ndCBhcHBlYXIgdG8gaGF2ZSBh
CisgICAgICAgICAgICAvLyByZWFzb24gdG8gZG8gc28sIHlldC4KKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxpbmsoCisgICAgICAgICAg
ICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklD
ICsgc2l6ZU9mSUMpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KAorICAgICAgICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3Iuc2xvd1BhdGhKdW1wKCksCisg
ICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxvY2F0
aW9uT2YoZ2V0QnlJZC5tX2dlbmVyYXRvci5zbG93UGF0aEJlZ2luKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvci5maW5hbGl6ZShsaW5rQnVmZmVyLCAq
c3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXIpOworICAgICAgICB9CisgICAgfQor
ICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4
aXRJbmRleC0tOykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gKKyNkZWZpbmUgRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSW5saW5lQ2FjaGVE
ZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3IoKSB7IH0KKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoRG9uZTsKK307CisKK2NsYXNz
IEdldEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJs
aWM6CisgICAgR2V0QnlJZERlc2NyaXB0b3IoKSB7IH0KKyAgICAKKyAgICBHZXRCeUlkRGVzY3Jp
cHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0lt
cGwqIHVpZCkKKyAgICAgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAgICAgLCBt
X2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
a21hcElEOyB9CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlT3JpZ2luOyB9CisgICAgU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOworICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luOworICAgIFN0cmluZ0ltcGwqIG1fdWlkOworCitwdWJsaWM6Cisg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUu
aCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3N0YXRpYyBzaXplX3Qgc19zaXplT2ZHZXRCeUlkOworc3RhdGlj
IHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7CisKK3NpemVfdCBzaXplT2ZHZXRCeUlkKCkKK3sKKyAg
ICBpZiAoc19zaXplT2ZHZXRCeUlkKQorICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbmVyYXRvcigKKyAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwK
KyAgICAgICAgZmFsc2UpOworICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Cisg
ICAgCisgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6
ZSgpOworfQorCitzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCit7CisgICAgaWYgKHNfc2l6ZU9mUHV0
QnlJZCkKKyAgICAgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlciBqaXQ7CisgICAgCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCisg
ICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksCisgICAgICAgIEdQUkluZm86
OnJlZ1Q4LCBmYWxzZSwgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0KTsKKyAgICBnZW5lcmF0b3Iu
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgIAorICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQg
PSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTElubGluZUNhY2hlU2l6ZV9oCisjZGVmaW5lIEZUTElubGlu
ZUNhY2hlU2l6ZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCitzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOworc2l6ZV90IHNpemVPZlB1
dEJ5SWQoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExJbmxpbmVDYWNoZVNpemVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAko
cmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhzdWJXaXRo
T3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShz
dHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAg
ICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQi
LCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50
NjQsIGludDY0KSkgXAorICAgIG1hY3JvKHdlYmtpdFBhdGNocG9pbnRJbnQ2NCwgImxsdm0ud2Vi
a2l0LnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQzMiwgaW50MzIsIHJl
ZjgsIGludDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyh3ZWJraXRTdGFja21hcCwgImxsdm0u
d2Via2l0LnN0YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZh
cmlhZGljKSkgXAogICAgIG1hY3JvKHRyYXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9p
ZFR5cGUpKSBcCiAgICAgbWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1Nzg0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsMjQgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRD
b2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAgICAgfSAvLyBlbHNlIHRoaXMgZnVuY3Rpb24gaGFk
IG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCiAgICAgCisgICAgaWYgKHNpZGVDb2Rl
TGlua0J1ZmZlcikgeworICAgICAgICAvLyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNpYWwgc2xvdyBw
YXRocyB0aGF0IHdlIGdlbmVyYXRlIG91cnNlbHZlcywgbGlrZSBmb3IgaW5saW5lCisgICAgICAg
IC8vIGNhY2hlcy4KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNsb3dQYXRo
Q2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTbG93UGF0aENhbGwmIGNhbGwgPSBz
bG93UGF0aENhbGxzW2ldOworICAgICAgICAgICAgc2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAor
ICAgICAgICAgICAgICAgIGNhbGwuY2FsbCgpLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKG1fcGxhbi52bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKG1fcGxhbi52
bSwgY2FsbC5rZXkoKSkuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGpp
dENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICpzaWRlQ29k
ZUxpbmtCdWZmZXIsCisgICAgICAgICAgICAoIkZUTCBzaWRlIGNvZGUgZm9yICVzIiwKKyAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
ay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKKyAgICAgICAgICAgIC5leGVjdXRh
YmxlTWVtb3J5KCkpOworICAgIH0KKyAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0
aEFyaXR5Q2hlY2s7CiAgICAgaWYgKGFyaXR5Q2hlY2suaXNTZXQoKSkKICAgICAgICAgd2l0aEFy
aXR5Q2hlY2sgPSBlbnRyeXBvaW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihhcml0eUNoZWNrKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2
aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZUTEdlbmVy
YXRlZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9T
UkV4aXRDb21waWxhdGlvbkluZm8uaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJMTFZNQVBJLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCkBAIC01MCw2ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIE93blB0cjxM
aW5rQnVmZmVyPiBleGl0VGh1bmtzTGlua0J1ZmZlcjsKICAgICBPd25QdHI8TGlua0J1ZmZlcj4g
ZW50cnlwb2ludExpbmtCdWZmZXI7CisgICAgT3duUHRyPExpbmtCdWZmZXI+IHNpZGVDb2RlTGlu
a0J1ZmZlcjsKKyAgICBWZWN0b3I8U2xvd1BhdGhDYWxsPiBzbG93UGF0aENhbGxzOyAvLyBDYWxs
cyBpbnNpZGUgdGhlIHNpZGUgY29kZS4KICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5m
bz4gb3NyRXhpdDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYXJpdHlDaGVjazsKICAgICBH
ZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCwx
MiBAQCB2b2lkIExvY2F0aW9uOjpyZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlCiAjZXJyb3IgIkNQ
VSBhcmNoaXRlY3R1cmUgbm90IHN1cHBvcnRlZC4iCiAjZW5kaWYgLy8gQ1BVIGNhc2VzIGZvciBM
b2NhdGlvbiBtZXRob2RzCiAKK0dQUlJlZyBMb2NhdGlvbjo6ZGlyZWN0R1BSKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIWFkZGVuZCgpKTsKKyAgICByZXR1cm4gZ3ByKCk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsx
NTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0dQUigpIGNvbnN0OwogICAgIGJvb2wgaW52b2x2
ZXNHUFIoKSBjb25zdDsKICAgICBHUFJSZWcgZ3ByKCkgY29uc3Q7CisgICAgR1BSUmVnIGRpcmVj
dEdQUigpIGNvbnN0OyAvLyBHZXQgdGhlIEdQUiBhbmQgYXNzZXJ0IHRoYXQgdGhlcmUgaXMgbm8g
YWRkZW5kLgogICAgIAogICAgIGJvb2wgaXNGUFIoKSBjb25zdDsKICAgICBGUFJSZWcgZnByKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JPU1JF
bnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUg
IkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIK
ICNpbmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKQEAgLTEyMjIs
MjIgKzEyMjMsMjkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkK
ICAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gMDsKKyAgICAgICAgLy8gVW50eXBlZFVzZSBp
cyBhIGJpdCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGFuZCBJJ20gbm90IHN1cmUgaG93IGJlc3Qg
dG8gZG8gaXQsIHlldC4KKyAgICAgICAgLy8gQmFzaWNhbGx5IHdlIG5lZWQgdG8gZW1pdCBhIGNl
bGwgYnJhbmNoIHRoYXQgdGFrZXMgeW91IHRvIHRoZSBzbG93IHBhdGgsIGJ1dCB0aGUgc2xvdwor
ICAgICAgICAvLyBwYXRoIGlzIGdlbmVyYXRlZCBieSB0aGUgSUMgZ2VuZXJhdG9yIHNvIHdlIGNh
bid0IGp1bXAgdG8gaXQgZnJvbSBoZXJlLiBBbmQgdGhlIElDCisgICAgICAgIC8vIGdlbmVyYXRv
ciBjdXJyZW50bHkgZG9lc24ndCBrbm93IGhvdyB0byBlbWl0IHN1Y2ggYSBicmFuY2guIFNvLCBm
b3Igbm93LCB3ZSBqdXN0CisgICAgICAgIC8vIHJlc3RyaWN0IHRoaXMgdG8gQ2VsbFVzZS4KKyAg
ICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOwogCi0g
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2Fz
ZSBDZWxsVXNlOgotICAgICAgICAgICAgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAg
ICAgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworCisgICAgICAgIGlmICgh
T3B0aW9uczo6ZnRsSUNVc2VzUGF0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZCksIG1fY2FsbEZyYW1lLCBt
X291dC5pbnRQdHJaZXJvLCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICAvLyBBcmd1bWVudHM6IGlkLCBieXRl
cywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY2FsbCgKKyAgICAg
ICAgICAgIG1fb3V0LndlYmtpdFBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZH
ZXRCeUlkKCkpLAorICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25z
dEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkdldEJ5SWQpLCBtX2NhbGxGcmFtZSwgbV9vdXQuaW50UHRyWmVybywgYmFzZSwgbV9vdXQuY29u
c3RJbnRQdHIodWlkKSkpOworICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRC
eUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4
LDggQEAgcHVibGljOgogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwg
YXJnMSwgYXJnMik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBh
cmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxk
ZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVl
IGFyZzQpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcy
LCBhcmczLCBhcmc0KTsgfQorICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1
KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJn
MywgYXJnNCwgYXJnNSk7IH0KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJn
NSwgTFZhbHVlIGFyZzYpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBh
cmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitu
YW1lc3BhY2UgeworCisvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRM
IGlzIGN1cnJlbnRseSBhbHdheXMgNjQtYml0Lgorc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6
ZSA9IDg7CisKKy8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVw
IHRoZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBD
YWxsQ29udGV4dCB7CitwdWJsaWM6CisgICAgQ2FsbENvbnRleHQoCisgICAgICAgIFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0
LAorICAgICAgICB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lz
dGVycykKKyAgICAgICAgLCBtX2ppdChqaXQpCisgICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3Mp
CisgICAgICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKKyAgICB7CisgICAg
ICAgIC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUgb3Igc3Rh
Y2sgcmVnaXN0ZXJzLgorICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgICAgIGlm
IChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX3VzZWRS
ZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBzaXpl
X3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsKKyAgICAgICAg
CisgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhID0KKyAgICAgICAgICAgIChzdGQ6Om1heCht
X251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VN
RU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51
bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcgPSAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsg
aS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVy
c1RoYXROZWVkU2F2aW5nKys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBv
ZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9CisgICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJl
YSArCisgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nICogd29y
ZFNpemU7CisgICAgICAgIAorICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQorICAgICAgICAg
ICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRl
ZEZvclJldHVybkFkZHJlc3MgKworICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJP
ZlNldFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZykgKiB3
b3JkU2l6ZTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzdGFja0FsaWdubWVudCA9IDE2Owor
ICAgICAgICAKKyAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRl
ZCArIHN0YWNrQWxpZ25tZW50IC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50IC0gMSk7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFj
a0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIAorICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lz
dGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRv
U2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSkpOworICAgICAgICAgICAgbV90aHVua1NhdmVTZXQu
Y2xlYXIocmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZz
ZXRUb1RodW5rU2F2aW5nQXJlYTsKKyAgICB9CisgICAgCisgICAgfkNhbGxDb250ZXh0KCkKKyAg
ICB7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJu
UmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4o
TlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbV9udW1BcmdzKTsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rl
cihpKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJSZWcgcmVn
ID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OworICAgIH0KKyAgICAKKyAg
ICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCog
Y2FsbFRhcmdldCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXko
dXNlZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0LCBvZmZzZXQoKSk7CisgICAgfQorICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQpCisgICAgewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXN1bHQgPSBtX2ppdC5jYWxsKCk7CisgICAg
ICAgIG1fc3RhdGUuZmluYWxpemVyLT5zbG93UGF0aENhbGxzLmFwcGVuZChTbG93UGF0aENhbGwo
CisgICAgICAgICAgICByZXN1bHQsIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0YXRlJiBtX3N0
YXRlOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBDQ2FsbEhlbHBlcnMm
IG1faml0OworICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKKyAgICBHUFJSZWcgbV9yZXR1cm5SZWdp
c3RlcjsKKyAgICBzaXplX3QgbV9vZmZzZXRUb1NhdmluZ0FyZWE7CisgICAgc2l6ZV90IG1fc3Rh
Y2tCeXRlc05lZWRlZDsKKyAgICBSZWdpc3RlclNldCBtX3RodW5rU2F2ZVNldDsKKyAgICBwdHJk
aWZmX3QgbV9vZmZzZXQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCisgICAgSl9KSVRP
cGVyYXRpb25fRVNzaUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNhbGxGcmFt
ZVJlZ2lzdGVyLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIG9iamVj
dCwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVz
ZWRSZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHMoCisg
ICAgICAgIGNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1
YkluZm8pLCBvYmplY3QsCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQp
KTsKKyAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJh
dGlvbikpOworICAgIC8vIEZJWE1FOiBGVEwgc2hvdWxkIHN1cHBvcnQgZXhjZXB0aW9ucy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExTbG93UGF0aENhbGxfaAorI2RlZmlu
ZSBGVExTbG93UGF0aENhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKyNpbmNsdWRl
ICJKSVRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgU2xv
d1BhdGhDYWxsIHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGwoKSB7IH0KKyAgICAKKyAgICBT
bG93UGF0aENhbGwoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBrZXkpCisgICAgICAgIDogbV9jYWxsKGNhbGwpCisgICAgICAgICwgbV9rZXkoa2V5KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbDsgfQorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXkoKSBjb25zdCB7IHJl
dHVybiBtX2tleTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X2NhbGw7CisgICAgU2xvd1BhdGhDYWxsS2V5IG1fa2V5OworfTsKKworTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgQ0Nh
bGxIZWxwZXJzJiwgSl9KSVRPcGVyYXRpb25fRVNzaUpJLAorICAgIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBjYWxsRnJhbWVSZWdpc3RlciwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcgb2JqZWN0
LAorICAgIFN0cmluZ0ltcGwqIHVpZCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2xvd1BhdGhDYWxsX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxs
S2V5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGxLZXkuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgU2xvd1BhdGhDYWxs
S2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dXNl
ZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQs
ICIsIGNhbGxUYXJnZXQgPSAiLCBSYXdQb2ludGVyKG1fY2FsbFRhcmdldCksICI+Iik7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU2xvd1BhdGhDYWxs
S2V5X2gKKyNkZWZpbmUgRlRMU2xvd1BhdGhDYWxsS2V5X2gKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCisvLyBUaGlzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNvbWUgc2FuaXR5IGluIHNs
b3ctcGF0aCBjYWxscyBvdXQgb2YgdGhlIEZUTCdzIGlubGluZQorLy8gY2FjaGVzLiBUaGUgaWRl
YSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgYWxsIG9mIHRoZSByZWdpc3RlciBzYXZlL3Jlc3RvcmUg
c3R1ZmYgdG8KKy8vIGJlIGdlbmVyYXRlZCBhdCBlYWNoIElDIHNpdGUuIEluc3RlYWQsIHRoZSBJ
QyBzbG93IHBhdGggY2FsbCBzaXRlIHdpbGwganVzdCBzYXZlCisvLyB0aGUgcmVnaXN0ZXJzIG5l
ZWRlZCBmb3IgdGhlIGFyZ3VtZW50cy4gSXQgd2lsbCBhcnJhbmdlIGZvciB0aGVyZSB0byBiZSBl
bm91Z2gKKy8vIHNwYWNlIG9uIHRvcCBvZiBzdGFjayB0byBzYXZlIHRoZSByZW1haW5pbmcgcmVn
aXN0ZXJzIGFuZCB0aGUgcmV0dXJuIFBDLiBUaGVuIGl0CisvLyB3aWxsIGNhbGwgYSBzaGFyZWQg
dGh1bmsgdGhhdCB3aWxsIHNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuIFRoYXQgdGh1bmsg
bmVlZHMKKy8vIHRvIGtub3cgdGhlIHN0YWNrIG9mZnNldCBhdCB3aGljaCB0aGluZ3MgZ2V0IHNh
dmVkIGFsb25nIHdpdGggdGhlIGNhbGwgdGFyZ2V0LgorCisvLyBOb3RlIHRoYXQgdGhlIG9mZnNl
dCBpcyAqbm90IGluY2x1ZGluZyogdGhlIHJldHVybiBQQyB0aGF0IHdvdWxkIGJlIHB1c2hlZCBv
biBYODYuCisKK2NsYXNzIFNsb3dQYXRoQ2FsbEtleSB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhD
YWxsS2V5KCkKKyAgICAgICAgOiBtX2NhbGxUYXJnZXQoMCkKKyAgICAgICAgLCBtX29mZnNldCgw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5KGNvbnN0IFJlZ2lzdGVy
U2V0JiBzZXQsIHZvaWQqIGNhbGxUYXJnZXQsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKHNldCkKKyAgICAgICAgLCBtX2NhbGxUYXJnZXQoY2FsbFRhcmdldCkK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lz
dGVyczsgfQorICAgIHZvaWQqIGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJn
ZXQ7IH0KKyAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBlbnVt
IEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcg
eyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBTbG93UGF0aENhbGxLZXkoRW1wdHlWYWx1ZVRh
ZykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OkVtcHR5VmFsdWUpCisg
ICAgICAgICwgbV9jYWxsVGFyZ2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCisgICAgICAg
IDogbV91c2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpEZWxldGVkVmFsdWUpCisgICAgICAgICwg
bV9jYWxsVGFyZ2V0KDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJz
LmlzRW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlZFJlZ2lzdGVycy5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzID09IG90aGVyLm1fdXNlZFJlZ2lzdGVycworICAg
ICAgICAgICAgJiYgbV9jYWxsVGFyZ2V0ID09IG90aGVyLm1fY2FsbFRhcmdldAorICAgICAgICAg
ICAgJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQ7CisgICAgfQorICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5oYXNoKCkg
KyBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX2NhbGxUYXJnZXQpICsgbV9vZmZzZXQ7CisgICAgfQor
Citwcml2YXRlOgorICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICB2b2lkKiBt
X2NhbGxUYXJnZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFNsb3dQ
YXRoQ2FsbEtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNsb3dQYXRo
Q2FsbEtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBhLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkZUTDo6U2xvd1BhdGhDYWxs
S2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5SGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk+IDogcHVibGljIEN1
c3RvbUhhc2hUcmFpdHM8SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleT4geyB9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRM
U2xvd1BhdGhDYWxsS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMSBAQCB2
b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnByaW50KCIo
Iiwga2luZCwgIiwgcmVnIiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIikiKTsKIH0KIAor
R1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUihTdGFja01hcHMmIHN0YWNrbWFw
cykgY29uc3QKK3sKKyAgICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKHN0YWNr
bWFwcywgKnRoaXMpLmRpcmVjdEdQUigpOworfQorCiB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246
OnJlc3RvcmVJbnRvKAogICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIFN0YWNrTWFwcyYgc3RhY2tt
YXBzLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3QKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMTU3ODQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsNyBAQCBzdHJ1Y3QgU3RhY2tNYXBzIHsKICAgICAgICAgdm9pZCBw
YXJzZShEYXRhVmlldyosIHVuc2lnbmVkJiBvZmZzZXQpOwogICAgICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgICAgIAorICAgICAgICBHUFJSZWcgZGlyZWN0R1BS
KFN0YWNrTWFwcyYpIGNvbnN0OwogICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKE1hY3JvQXNzZW1i
bGVyJiwgU3RhY2tNYXBzJiwgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNv
bnN0OwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5o
CShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRG
dW5jdGlvbi5oIgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgogI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRl
ICJGVExTdGFja01hcHMuaCIKQEAgLTU2LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxK
SVRDb2RlPiBqaXRDb2RlOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9u
OwogICAgIEpJVEZpbmFsaXplciogZmluYWxpemVyOworICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRC
eUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9u
TmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291
bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc3RhY2ttYXBzU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDYgKzE0NCw2NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XCiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsgZm9yIGNhbGxGcmFtZSBhdCAlcyIsIHRvQ1N0cmluZyhsb2NhdGlvbikuZGF0
YSgpKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVy
YXRvcihWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQoreworICAgIEFzc2VtYmx5
SGVscGVycyBqaXQoJnZtLCAwKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIHNhdmUgdGhlIGdp
dmVuIHJlZ2lzdGVycyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCB0aGVuIHdlIHdhbnQgdG8gc2F2ZSB0
aGUKKyAgICAvLyBvbGQgcmV0dXJuIGFkZHJlc3Mgc29tZXdoZXJlIHBhc3QgdGhhdCBvZmZzZXQs
IGFuZCB0aGVuIGZpbmFsbHkgd2Ugd2FudCB0byBtYWtlIHRoZQorICAgIC8vIGNhbGwuCisgICAg
CisgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQgPSBrZXkub2Zmc2V0KCkgKyBzaXplb2Yodm9pZCop
OworICAgIAorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgY3VycmVudE9mZnNldCAr
PSBzaXplb2Yodm9pZCopOworI2VuZGlmCisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0g
TWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRD4ocmVnICsgMSkpIHsKKyAgICAgICAgaWYgKCFrZXkudXNlZFJl
Z2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGppdC5z
dG9yZVB0cihyZWcsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgY3VycmVudE9mZnNl
dCArPSBzaXplb2Yodm9pZCopOworICAgIH0KKyAgICAKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVy
OjpGUFJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyBy
ZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0
PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyArIDEpKSB7CisgICAgICAgIGlmICgh
a2V5LnVzZWRSZWdpc3RlcnMoKS5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBqaXQuc3RvcmVEb3VibGUocmVnLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAg
IGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKGRvdWJsZSk7CisgICAgfQorICAgIAorICAgIGppdC5w
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSkpOwor
ICAgIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIAorICAg
IGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGtleS5vZmZzZXQoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgCisgICAgZm9yIChNYWNyb0Fz
c2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rl
cigpOyA7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQ+KHJl
ZyAtIDEpKSB7CisgICAgICAgIGlmIChrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKSB7Cisg
ICAgICAgICAgICBjdXJyZW50T2Zmc2V0IC09IHNpemVvZihkb3VibGUpOworICAgICAgICAgICAg
aml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgY3VycmVudE9mZnNldCksIHJlZyk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJlZyA9PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IDsgcmVnID0gc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHJlZyAtIDEpKSB7CisgICAgICAg
IGlmIChrZXkudXNlZFJlZ2lzdGVycygpLmdldChyZWcpKSB7CisgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0IC09IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBj
dXJyZW50T2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVnID09IE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGtleS5jYWxsVGFyZ2V0KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSku
ZGF0YSgpKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShy
ZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAK
ICNpbmNsdWRlICJGVExMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAKQEAgLTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRob3V0U3RhY2tNYXBUaHVua0dlbmVyYXRvcihW
TSopOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tN
YXBUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IExvY2F0aW9uJik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxL
ZXkmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgR2VuZXJhdG9yVHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVj
ZXNzYXJ5KApAQCAtNjUsOCArNjcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgdm0sIG1fb3Ny
RXhpdFRodW5rcywgbG9jYXRpb24sIG9zckV4aXRHZW5lcmF0aW9uV2l0aFN0YWNrTWFwVGh1bmtH
ZW5lcmF0b3IpOwogICAgIH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xv
d1BhdGhDYWxsVGh1bmsoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAorICAgICAgICAgICAgdm0sIG1f
c2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAg
ICB9CisgICAgCiBwcml2YXRlOgogICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gbV9vc3JFeGl0VGh1bmtzOworICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCShyZXZpc2lvbiAxNTc4NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDYsNiArOTA2LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMT4oYXJnMSwgYXJnMik7CiAgICAgfQogICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBh
cmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIHsKKyAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMj4oYXJnMSwgYXJnMyk7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICAgICAgbW92ZShhcmc0LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIH0K
KyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0
ciBhcmcxKQogICAgIHsKICAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE1Nzg0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzksNyArMjc5LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4NikKLSNkZWZp
bmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyAwCisjZGVmaW5lIE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMgMHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC0zNDIsNyAr
MzQyLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKFg4Nl82NCkKLSNkZWZpbmUgTlVN
QkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA2CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMgNnUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC00MjMsNyArNDIzLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgQ1BVKEFSTSkKLSNkZWZpbmUgTlVNQkVSX09GX0FS
R1VNRU5UX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMg
NHUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CkBAIC00OTcsNyArNDk3LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAjaWYgQ1BVKEFSTTY0KQotI2RlZmluZSBOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTIDgKKyNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA4dQogCiBj
bGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKQEAgLTU5MCw3ICs1OTAsNyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAKICNpZiBDUFUoTUlQUykKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UyA0CisjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BS
SW5mbyB7CiBwdWJsaWM6CkBAIC02NTgsNyArNjU4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAj
aWYgQ1BVKFNINCkKLSNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0CisjZGVm
aW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKIAogY2xhc3MgR1BSSW5mbyB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIFN0cnVjdHVy
ZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZm8oKQoreworICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBuZXcgU3RydWN0dXJlU3R1YkluZm8oKTsKKyAgICByZXR1cm4gc3R1
YkluZm87Cit9CisKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIDog
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jay0+
YWRkU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9j
ay0+YWRkU3R1YkluZm8oKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luOwogfQogCkBAIC02MywyOSArNjksMzQgQEAgSklUQnlJZEdl
bmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICNlbmRpZgogfQogCi12b2lkIEpJVEJ5SWRHZW5l
cmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit2b2lkIEpJVEJ5SWRHZW5l
cmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0
aCkKIHsKLSAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtX2NhbGwpOworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxv
Y2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZihtX2NhbGwpOwogICAgIG1fc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICBtX3N0dWJJbmZvLT5w
YXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fc3RydWN0dXJlSW1t
KSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgZmFzdFBhdGgubG9jYXRpb25PZihtX3N0
cnVjdHVyZUltbSksIGNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgbV9zdHViSW5mby0+cGF0Y2gu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fc3RydWN0dXJlQ2hlY2spKTsKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0
UGF0aC5sb2NhdGlvbk9mKG1fc3RydWN0dXJlQ2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRp
b24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CisgICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7CiAjZWxz
ZQogICAgIG1fc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBNYWNy
b0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0b3JlKSk7CisgICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX3RhZ0xvYWRPclN0
b3JlKSk7CiAgICAgbV9zdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2xvYWRPclN0b3JlKSk7
CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25PZihtX2xvYWRP
clN0b3JlKSk7CiAjZW5kaWYKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dD
YXNlID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAg
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9zbG93UGF0aEJlZ2lu
KSk7CisgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGgubG9jYXRpb25PZihtX3Ns
b3dQYXRoQmVnaW4pKTsKICAgICBtX3N0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2RvbmUpKTsKKyAgICAgICAgY2Fs
bFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fZG9uZSkpOwogICAgIG1fc3R1
YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5U3RvcmFnZUxvYWQpKTsKKyAgICAgICAgY2FsbFJl
dHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKG1fcHJvcGVydHlTdG9yYWdlTG9hZCkp
OworfQorCit2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCit7CisgICAgZmluYWxpemUobGlua0J1ZmZlciwgbGlua0J1ZmZlcik7CiB9CiAKIHZv
aWQgSklUQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aENoZWNrcyhNYWNyb0Fzc2VtYmxl
ciYgaml0LCBHUFJSZWcgYnV0dGVyZmx5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3ODQxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbCA9
IGNhbGw7CiAgICAgfQogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aEJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0aEJlZ2luOyB9CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGhKdW1wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVjay5t
X2p1bXA7IH0KIAorICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVm
ZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogICAgIHZvaWQgZmluYWxpemUo
TGlua0J1ZmZlciYpOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiAr
MzMsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0Ojpz
cGVjaWFsUmVnaXN0ZXJzKCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpCiB7CiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHJlc3VsdC5zZXQoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICByZXN1bHQuc2V0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBv
aW50ZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVn
aXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKQoreworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsK
KyAgICByZXN1bHQubWVyZ2Uoc3RhY2tSZWdpc3RlcnMoKSk7CisgICAgcmVzdWx0LnNldChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQu
c2V0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgcmVzdWx0LnNldChHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwpAQCAtNDYsNiArNTMsNTIgQEAgUmVnaXN0ZXJTZXQgUmVn
aXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1JlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3Rl
clNldCByZXN1bHQ7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6ZWJ4KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICByZXN1bHQu
c2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEy
KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICByZXN1bHQuc2V0KFg4
NlJlZ2lzdGVyczo6cjE0KTsKKyAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE1KTsKKyNl
bHNlCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxsR1BScygpCit7CisgICAg
UmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
cmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1i
bGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQ+KHJlZyArIDEpKQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKQoreworICAg
IFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyAgICBmb3IgKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9B
c3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCk7IHJlZyA9IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQ+KHJlZyArIDEpKQorICAgICAgICByZXN1bHQuc2V0KHJlZyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lz
dGVycygpCit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIHJlc3VsdC5tZXJnZShhbGxH
UFJzKCkpOworICAgIHJlc3VsdC5tZXJnZShhbGxGUFJzKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgUmVnaXN0ZXJTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBtX3ZlY3Rvci5kdW1wKG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsMTIgQEAgY2xhc3MgUmVnaXN0
ZXJTZXQgewogcHVibGljOgogICAgIFJlZ2lzdGVyU2V0KCkgeyB9CiAgICAgCisgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IHN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNw
ZWNpYWxSZWdpc3RlcnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7CisgICAgc3RhdGljIFJl
Z2lzdGVyU2V0IGFsbEZQUnMoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsUmVnaXN0ZXJz
KCk7CiAKICAgICB2b2lkIHNldChHUFJSZWcgcmVnLCBib29sIHZhbHVlID0gdHJ1ZSkKICAgICB7
CkBAIC03NiwxMyArODEsNTUgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChy
ZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7
IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZXhjbHVkZShjb25z
dCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7
IH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9Owor
ICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAgCisgICAgUmVn
aXN0ZXJTZXQoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3ZlY3RvcihCaXRWZWN0b3I6OkVt
cHR5VmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChEZWxldGVkVmFs
dWVUYWcpCisgICAgICAgIDogbV92ZWN0b3IoQml0VmVjdG9yOjpEZWxldGVkVmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmlzRW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmlzRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ciA9PSBvdGhlci5tX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5oYXNoKCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgQml0VmVjdG9yIG1fdmVj
dG9yOwogfTsKIAorc3RydWN0IFJlZ2lzdGVyU2V0SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeyByZXR1cm4gc2V0Lmhhc2goKTsgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZ2lzdGVyU2V0JiBhLCBjb25zdCBSZWdpc3RlclNl
dCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpSZWdpc3RlclNldD4gewor
ICAgIHR5cGVkZWYgSlNDOjpSZWdpc3RlclNldEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OlJlZ2lzdGVyU2V0PiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6UmVnaXN0
ZXJTZXQ+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCiAjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAg
dHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGZ0bFRyYXBzT25P
U1JFeGl0LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcs
IGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwLCBmYWxzZSkgXAor
ICAgIHYoYm9vbCwgZnRsSUNVc2VzUGF0Y2hwb2ludCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVz
ZUxMVk1PU1JFeGl0SW50cmluc2ljLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZHVtcExMVk1JUiwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNl
KSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxMy0xMC0yMiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21l
IHNpbXBsZSBpbmxpbmUgY2FjaGVzIHVzaW5nIExMVk0gcGF0Y2hwb2ludHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzE2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgSGFobmVuYmVyZy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmVlZGVk
IHNvbWUgYmV0dGVyIGJpdHZlY3RvciBzdXBwb3J0LCBsaWtlIG1lcmdpbmcgKHw9KSwgZXhjbHVk
aW5nICgmPX4pLAorICAgICAgICBoYXNoaW5nLCBhbmQgYml0IGNvdW50aW5nLgorCisgICAgICAg
ICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0U2xvdyk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3cpOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6OmJpdENvdW50U2xvdyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZXF1YWxz
U2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Omhhc2hTbG93Q2FzZSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6ZHVtcCk6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om1lcmdlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjpleGNsdWRlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpiaXRDb3VudCk6CisgICAgICAg
IChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpp
c0VtcHR5VmFsdWUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmlzRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjppc0VtcHR5T3JEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Omhhc2gpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAgICAgKFdU
Rjo6Qml0VmVjdG9ySGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6Cisg
ICAgICAgIChXVEY6OkN1c3RvbUhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChXVEY6OkN1c3RvbUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdURjo6Q3VzdG9tSGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6OkN1c3Rv
bUhhc2hUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5o
OgorICAgICAgICAoV1RGOjpiaXRDb3VudCk6CisKIDIwMTMtMTAtMjIgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxNTc4MzUuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1Nzg0MSkKKysr
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICsz
NywxNCBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgQml0VmVjdG9yOjpzZXRTbG93KGNvbnN0IEJp
dFZlY3RvciYgb3RoZXIpCiB7CiAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7Ci0gICAg
aWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkgfHwgb3RoZXIu
aXNFbXB0eU9yRGVsZXRlZFZhbHVlKCkpCiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhl
ci5tX2JpdHNPclBvaW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAgIE91dE9mTGluZUJpdHMqIG5l
d091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKICAg
ICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRl
Q291bnQob3RoZXIuc2l6ZSgpKSk7CiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwogICAgIH0KLSAgICBpZiAo
IWlzSW5saW5lKCkpCisgICAgaWYgKCFpc0lubGluZSgpICYmICFpc0VtcHR5T3JEZWxldGVkVmFs
dWUoKSkKICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwog
ICAgIG1fYml0c09yUG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7CiB9CkBAIC0xMjQsNyArMTI0
LDU5IEBAIHZvaWQgQml0VmVjdG9yOjptZXJnZVNsb3coY29uc3QgQml0VmVjdG8KICAgICAgICAg
YS0+Yml0cygpW2ldIHw9IGItPmJpdHMoKVtpXTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFT
U0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gfmNsZWFuc2VJbmxpbmVCaXRz
KG90aGVyLm1fYml0c09yUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKGlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFvdGhlci5pc0lubGluZSgpKTsK
KyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH4qb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRz
KCk7CisgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSA8PCBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9mTGlu
ZUJpdHMoKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5lQml0
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGItPm51
bVdvcmRzKCkpOyBpLS07KQorICAgICAgICBhLT5iaXRzKClbaV0gJj0gfmItPmJpdHMoKVtpXTsK
K30KKworc2l6ZV90IEJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIWlzSW5saW5lKCkpOworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRPZkxp
bmVCaXRzKCk7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
Yml0cy0+bnVtV29yZHMoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0ICs9IGJpdENvdW50KGJpdHMt
PmJpdHMoKVtpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCaXRWZWN0b3I6OmVx
dWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gVGhp
cyBpcyByZWFsbHkgY2hlZXN5LCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1heChzaXplKCksIG90aGVyLnNpemUoKSk7IGktLTsp
IHsKKyAgICAgICAgaWYgKGdldChpKSAhPSBvdGhlci5nZXQoaSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit1aW50cHRyX3QgQml0VmVj
dG9yOjpoYXNoU2xvd0Nhc2UoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7Cisg
ICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICB1aW50
cHRyX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5udW1Xb3Jkcygp
OyBpLS07KQorICAgICAgICByZXN1bHQgXj0gYml0cy0+Yml0cygpW2ldOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgQml0VmVjdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAoZ2V0KGkpKQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1Nzg0MSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAK
ICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IApAQCAtMTc2LDkgKzE3OCw2NiBAQCBwdWJsaWM6IAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSBvdGhlci5tX2JpdHNPclBvaW50ZXI7
CisgICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpOworICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgp
KSB7CisgICAgICAgICAgICBleGNsdWRlU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IH5vdGhlci5tX2JpdHNPclBv
aW50ZXI7CisgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXRDb3VudChjbGVhbnNlSW5saW5l
Qml0cyhtX2JpdHNPclBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdENvdW50U2xvdygpOwor
ICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OworICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUg
fTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIAorICAg
IEJpdFZlY3RvcihFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcigwKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yKERlbGV0ZWRWYWx1ZVRhZykKKyAgICAg
ICAgOiBtX2JpdHNPclBvaW50ZXIoMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gIW1fYml0c09yUG9pbnRlcjsgfQorICAgIGJvb2wg
aXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPT0gMTsgfQor
ICAgIAorICAgIGJvb2wgaXNFbXB0eU9yRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9i
aXRzT3JQb2ludGVyIDw9IDE7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0
VmVjdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpICYmIG90
aGVyLmlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbV9iaXRzT3JQb2ludGVyID09IG90
aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIGVxdWFsc1Nsb3dDYXNlKG90aGVy
KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgaGFzaC4gSnVzdCB4b3IgdG9nZXRoZXIgdGhlIHdv
cmRzIHRoYXQgaG9sZCB0aGUgdmFyaW91cworICAgICAgICAvLyBiaXRzIGFuZCB0aGVuIGNvbXB1
dGUgdGhlIGhhc2guIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGRlYWwgd2l0aCBiaXR2ZWN0
b3JzCisgICAgICAgIC8vIHRoYXQgaGF2ZSBhIGxvdCBvZiB0cmFpbGluZyB6ZXJvJ3MuCisgICAg
ICAgIHVpbnRwdHJfdCB2YWx1ZTsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAg
ICB2YWx1ZSA9IGNsZWFuc2VJbmxpbmVCaXRzKG1fYml0c09yUG9pbnRlcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHZhbHVlID0gaGFzaFNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBJ
bnRIYXNoPHVpbnRwdHJfdD46Omhhc2godmFsdWUpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQpAQCAtMjA3LDYgKzI2NiwxMyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gYml0cyAmIH4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSA8PCBtYXhJbmxpbmVCaXRzKCkpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJp
dENvdW50KHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgaWYgKHNpemVvZih1aW50cHRy
X3QpID09IDQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYml0cykpOworICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oYml0cykpOworICAgIH0KKyAgICAKICAgICBjbGFzcyBPdXRPZkxpbmVCaXRz
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1CaXRzOyB9CkBAIC0yMzYsNiArMzAyLDEyIEBAIHByaXZhdGU6CiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhl
cik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZXhjbHVkZVNsb3coY29uc3QgQml0VmVj
dG9yJiBvdGhlcik7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBiaXRDb3Vu
dFNsb3coKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbHNT
bG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdWludHB0cl90IGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAgIAogICAgIHVpbnRwdHJf
dCogYml0cygpCiAgICAgewpAQCAtMjU0LDYgKzMyNiwyMCBAQCBwcml2YXRlOgogICAgIHVpbnRw
dHJfdCBtX2JpdHNPclBvaW50ZXI7CiB9OwogCitzdHJ1Y3QgQml0VmVjdG9ySGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQml0VmVjdG9yJiB2ZWN0b3IpIHsgcmV0dXJuIHZl
Y3Rvci5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBCaXRWZWN0b3ImIGEs
IGNvbnN0IEJpdFZlY3RvciYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEJpdFZlY3Rvcj4geworICAgIHR5cGVkZWYgQml0VmVjdG9ySGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEJpdFZlY3Rvcj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxC
aXRWZWN0b3I+IHsgfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6Qml0VmVj
dG9yOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTU3ODQxKQorKysgU291cmNlL1dU
Ri93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDM0IEBAIHN0
cnVjdCBOdWxsYWJsZUhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFQKICAgICBzdGF0aWMgVCBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigxKTsgfQogfTsKIAorLy8gVXNl
ZnVsIGZvciBjbGFzc2VzIHRoYXQgd2FudCBjb21wbGV0ZSBjb250cm9sIG92ZXIgd2hhdCBpcyBl
bXB0eSBhbmQgd2hhdCBpcyBkZWxldGVkLAorLy8gYW5kIGhvdyB0byBjb25zdHJ1Y3QgYm90aC4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ3VzdG9tSGFzaFRyYWl0cyA6IHB1YmxpYyBH
ZW5lcmljSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0
aW9uID0gdHJ1ZTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
VCYgc2xvdCkKKyAgICB7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJnNsb3QpIFQoVDo6RGVsZXRl
ZFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29u
c3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNEZWxldGVkVmFsdWUo
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gVChUOjpFbXB0eVZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wg
aXNFbXB0eVZhbHVlKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
LmlzRW1wdHlWYWx1ZSgpOworICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6Okhhc2hUcmFpdHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMTU3
ODQxKQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1Nyw2ICsxNTcsMTEgQEAgaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRzKQog
ICAgIHJldHVybiAoKChiaXRzICsgKGJpdHMgPj4gNCkpICYgMHhGMEYwRjBGKSAqIDB4MTAxMDEw
MSkgPj4gMjQ7CiB9CiAKK2lubGluZSBzaXplX3QgYml0Q291bnQodWludDY0X3QgYml0cykKK3sK
KyAgICByZXR1cm4gYml0Q291bnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHMpKSArIGJpdENv
dW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzID4+IDMyKSk7Cit9CisKIC8vIE1hY3JvIHRo
YXQgcmV0dXJucyBhIGNvbXBpbGUgdGltZSBjb25zdGFudCB3aXRoIHRoZSBsZW5ndGggb2YgYW4g
YXJyYXksIGJ1dCBnaXZlcyBhbiBlcnJvciBpZiBwYXNzZWQgYSBub24tYXJyYXkuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgU2l6ZT4gY2hhciAoJkFycmF5TGVuZ3RoSGVscGVyRnVuY3Rp
b24oVCAoJilbU2l6ZV0pKVtTaXplXTsKIC8vIEdDQyBuZWVkcyBzb21lIGhlbHAgdG8gZGVkdWNl
IGEgMCBsZW5ndGggYXJyYXkuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>